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

使用Python Pandas对行求和时返回NaN的问题如何调试解决?

问题根因
  • 列索引对齐不匹配:concat_list[['Bases','Chambers']].sum()返回的Series仅包含Bases、Chambers两个列索引,直接给concat_list.loc['Total']赋值时,Pandas会按列名匹配整表的所有列(包含Title、Netquantity),未匹配到的列会默认填充NaN。如果列数据类型存在不兼容,甚至Bases、Chambers两列也会返回NaN。
  • 列数据类型异常:如果Bases、Chambers列为object/字符串类型,表中的空值可能是空字符串而非NaN,fillna(0)无法处理这类空值,求和操作返回的结果本身就是NaN,赋值后自然全为空。
解决步骤

1. 修正数据类型与空值处理

先验证列数据类型,再做统一转换:

# 查看各列数据类型
print(concat_list.dtypes)
# 将目标列转为数值类型,无法转换的内容统一置为NaN
concat_list['Bases'] = pd.to_numeric(concat_list['Bases'], errors='coerce')
concat_list['Chambers'] = pd.to_numeric(concat_list['Chambers'], errors='coerce')
# 填充所有空值为0
concat_list = concat_list.fillna(0)
# 验证空值是否全部处理完成
print(concat_list.isna().sum())

2. 正确赋值合计行

方案1:仅给目标列赋值合计

直接指定合计行的对应列,避免索引对齐问题:

concat_list.loc['Total', ['Bases','Chambers']] = concat_list[['Bases','Chambers']].sum()

方案2:构造完整合计行赋值

如果需要给其他列也填充指定内容,可手动构造完整的行数据再赋值:

total_row = pd.Series({
    'Title': 'Total',
    'Netquantity': concat_list['Netquantity'].sum(),
    'Bases': concat_list['Bases'].sum(),
    'Chambers': concat_list['Chambers'].sum()
})
concat_list.loc['Total'] = total_row
调试验证

执行求和操作后先打印中间结果,确认求和逻辑正常:
print(concat_list[['Bases','Chambers']].sum())
如果返回结果是预期的数值,再执行赋值操作即可。

内容的提问来源于stack exchange,提问作者Samuel Saerang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03