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

Pandas 0.19.2求和异常:含缺失值的Series为何返回NaN而非0?

解决Pandas 0.19.2中sum()处理缺失值不符合预期的问题

嘿,我碰到过类似的情况,来帮你理清楚~

首先,咱们先拆解下你的问题:你把多列的value_counts()结果合并后,用sum()求和时,那些只在部分列出现的类别对应的行返回了NaN,但你期望这些缺失值被当作0来计算。

问题根源

Pandas的value_counts()只会统计列中实际出现过的类别,当你合并多个这类Series时,某个类别如果只在其中一列存在,其他列就会用NaN填充这个位置。虽然官方文档说“求和时NA视为0”,但这个描述其实是针对单Series中跳过NaN求和(比如pd.Series([2, NaN]).sum()会返回2,等价于把NaN当作0);但在合并后的DataFrame中,老版本(比如0.19.2)的sum(axis=1)如果遇到NaN,若没显式处理缺失值,结果就容易不符合预期——也有可能你不小心设置了skipna=False(默认是True,但手动修改后就会返回NaN)。

解决方案:先填充缺失值再求和

最直接的办法是在合并后先把NaN替换成0,再执行求和操作。举个模拟你场景的例子:

import pandas as pd

# 模拟你的数据源
df = pd.DataFrame({
    'Col1': ['apple', 'banana', 'apple', 'orange'],
    'Col2': ['banana', 'orange', 'orange', 'grape'],
    'Col3': ['apple', 'grape', 'grape', 'grape']
})

# 获取每列的value_counts
vc_col1 = df['Col1'].value_counts()
vc_col2 = df['Col2'].value_counts()
vc_col3 = df['Col3'].value_counts()

# 合并成DataFrame
combined_vc = pd.concat([vc_col1, vc_col2, vc_col3], axis=1)

# 问题:直接求和会得到NaN
print("直接求和的结果:")
print(combined_vc.sum(axis=1))

# 解决:先填充NaN为0,再求和
combined_vc_filled = combined_vc.fillna(0)
print("\n填充后求和的结果:")
print(combined_vc_filled.sum(axis=1))

运行这段代码后,你会发现填充后的求和结果完全符合预期——所有类别都得到了正确的累计计数,没有NaN。

额外提示

因为你用的是Pandas 0.19.2这个比较老旧的版本,建议如果后续有条件的话,可以升级到较新的稳定版(比如1.x系列),新版本对缺失值的处理逻辑更清晰,文档描述也更准确,能避免这类版本差异带来的困惑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:56:17