计算 Pandas 数据框中 np.nan 的数量

Posted

技术标签:

【中文标题】计算 Pandas 数据框中 np.nan 的数量【英文标题】:Count number of np.nan in a Pandas dataframe 【发布时间】:2021-01-04 08:05:37 【问题描述】:

我有一个包含 np.nan(Numpy 非数字)值的 Pandas 数据框:

            field1
2020-12-24  NaN
2020-12-25  NaN
2020-12-26  1.0
2020-12-27  2.0
2020-12-28  NaN
2020-12-29  1.0
2020-12-30  2.0

(索引是日期时间。) 我想获得一个新的数据框,其中包含开始日期和 np.nan 发生的次数,即

            field1
2020-12-24  2
2020-12-28  1

我试过这段代码:

prev = 1
for col_name, el in df.iterrows():
    print(el)
    if prev != np.nan and el[0] == np.nan:
        cnt = 1
    if prev == np.nan and el[0] == np.nan:
        cnt = cnt + 1
    if prev == np.nan and el[0] != np.nan:
        print(cnt)
    prev = el[0]

但它没有按预期工作,而且我想避免“for”循环,因为我希望它们在更大的数据帧上非常慢。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您可以通过Series.notnaSeries.cumsum 测试非缺失值来创建组,然后仅过滤NaNs 行,然后通过Series.mapSeries.value_counts 获取计数并通过Series.duplicated 过滤第一个重复的行:

m = df['field1'].notna()
s = m.cumsum()[~m]

df1 = s.map(s.value_counts())[~s.duplicated()].to_frame()
print (df1)
            field1
2020-12-24       2
2020-12-28       1

【讨论】:

【参考方案2】:

你可以在列上使用isna()的总和:

field1.isna().sum()

这相当于将列的长度减去计数(将排除NaN's)

len(df'field1') - df.count()

因此,您可以使用以下命令计算数据库中的所有Nan

len(df) - df.count()

对于行,您可以使用axis=1:

df.isna().sum(axis=1)

【讨论】:

他想要 IIUC 行中的值

以上是关于计算 Pandas 数据框中 np.nan 的数量的主要内容,如果未能解决你的问题,请参考以下文章

用 pandas 数据框中另一列的值填充多列中的 Na

在 python 中创建一个函数,它将在 pandas 数据框中估算均值或中值

Pandas学习2

Pandas处理缺失的数据

python数据分析之Pandas:汇总和计算描述统计

python 值比较判断,np.nan is np.nan 却 np.nan != np.nan ,pandas 单个数据框值判断nan