本文介绍一种简洁、健壮的 python 方法,使用 pandas 的 `str.split().str[0]` 对所有字符串型列自动提取逗号分隔后的第一部分,同时安全保留非字符串列(如数值、类别型)不变。
在实际数据处理中,常遇到类似 20.15,20.15 或 '10,10' 这类重复值拼接的字符串字段。若需统一提取每行中逗号前的首个子串(即去重取首),最直接高效的方式是按数据类型筛选 + 向量化字符串操作,而非逐列手动指定或使用易出错的 apply 函数。
以下是一个推荐的通用函数实现:
def extract_first_before_comma(df):
"""
对 DataFrame 中所有 object 类型列执行:以 ',' 分割字符串,并取首段。
数值型、布尔型等非字符串列保持原样(包括 int/float/delta 列)。
"""
df_copy = df.copy() # 避免修改原始数据
for col in df_copy.columns:
if df_copy[col].dtype == 'object':
# 安全转换为字符串(兼容含 None/NaN 的列),再分割取首
df_copy[col] = df_copy[col].astype(str).str.split(',').str[0]
return df_copy
# 使用示例
result_df = extract_first_before_comma(df)
print(result_df)✅ 关键优势说明:
⚠️ 注意事项:

if (df_copy[col].dtype == 'object' and
df_copy[col].astype(str).str.contains(',', na=False).any()):
df_copy[col] = df_copy[col].astype(str).str.split(',').str[0]综上,该方案兼顾鲁棒性、可读性与执行效率,是清洗此类“逗号拼接重复值”场景的标准实践。