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

使用Pandas统计DataFrame列中NaN次数时遇KeyError问题求助

解决Pandas统计Salary列NaN次数的KeyError问题

嘿,我来帮你搞定这个报错!你遇到的KeyError: 'Level NaN must be same as name (None)',根源是你用错了count()方法的用法。

为什么会报错?

Pandas里Series.count()(你这里enron_df.loc['salary']返回的是一个Series)的作用是统计非缺失值的数量,而且它的参数不是用来指定要统计的目标值的。你传入'NaN'后,Pandas会把它当成要进行分组的级别名称,这和你的DataFrame结构不匹配,所以才抛出了这个奇怪的KeyError。

正确的几种统计NaN次数的方法

这里给你几个实用的方案:

  1. 最简洁的方法:用isna().sum()
    先通过isna()把每个元素转换成布尔值(NaN对应True,非NaN对应False),再用sum()统计True的数量(因为True在Python中等价于1):

    count = enron_df['salary'].isna().sum()
    

    (如果习惯用旧方法,isnull()和isna()是完全等价的,也可以写成enron_df['salary'].isnull().sum())

  2. 用value_counts包含NaN统计
    如果你想同时看到所有值的分布(包括NaN),可以用value_counts()并设置dropna=False,再提取NaN的计数:

    import numpy as np
    count = enron_df['salary'].value_counts(dropna=False).get(np.nan, 0)
    

    这里get(np.nan, 0)是为了防止如果没有NaN的话返回0,避免KeyError。

  3. 另一种思路:总数量减去非缺失值数量
    既然count()是统计非缺失值,那总行数减去它的结果就是NaN的数量:

    count = len(enron_df['salary']) - enron_df['salary'].count()
    

另外提一句,如果你要取salary列,直接用enron_df['salary']比enron_df.loc['salary']更常规(除非salary是你的行索引名称,但看起来应该是列名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:30:11