You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:20:55