使用concat合并5个DataFrame后计算cost列sum()报错求解
解决DataFrame合并后Cost列求和的报错问题
首先,咱们先捋清楚问题根源:你的Cost列是object类型(本质是字符串格式),直接调用sum()时,pandas会默认尝试拼接字符串而非做数值求和;而转类型时报错,大概率是因为Cost列的字符串里藏着没法直接转成浮点数的内容——比如空格、货币符号、逗号,甚至是空值。
咱们一步步来解决:
1. 先排查Cost列的异常值
先用pd.to_numeric强制转换并捕获错误,快速定位哪些值转不了:
# 把无法转成数值的内容转为NaN,方便查看问题行 all_vendors['Cost_clean'] = pd.to_numeric(all_vendors['Cost'], errors='coerce') # 打印所有转换失败的行 print(all_vendors[all_vendors['Cost_clean'].isna()])
这样你就能看到哪些是“假数字”字符串,比如'$100'、'100 '(末尾带空格)、'1,000'这类,针对性做清洗。
2. 清洗Cost列并转换数值类型
根据排查到的问题,先清洗字符串,再转成数值类型:
# 去掉所有非数字和小数点的字符(比如符号、空格) all_vendors['Cost'] = all_vendors['Cost'].str.replace(r'[^0-9.]', '', regex=True) # 转成float类型,空值用0填充(按需调整填充值) all_vendors['Cost'] = pd.to_numeric(all_vendors['Cost'], errors='coerce').fillna(0)
3. 正常计算总和
现在Cost列已经是数值类型了,直接求和即可:
total_cost = all_vendors['Cost'].sum() print(total_cost)
另外提个小细节:你示例里的pd.concat([g, b, f, c, o])是直接传字典,实际应该把每个字典转成DataFrame再合并,比如:
g_df = pd.DataFrame([g]) b_df = pd.DataFrame([b]) # 其他字典同理转换 all_vendors = pd.concat([g_df, b_df, f_df, c_df, o_df])
不过你实际是合并5个结构相同的DataFrame,这部分应该没问题,只是示例代码的小疏漏~
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

