如何计算pandas DataFrame中的nan值?

Spe*_*er5 17 python nan dataframe python-3.x pandas

在pandas DataFrame中考虑(非数字)nan值的最佳方法是什么?

以下代码:

import numpy as np
import pandas as pd
dfd = pd.DataFrame([1, np.nan, 3, 3, 3, np.nan], columns=['a'])
dfv = dfd.a.value_counts().sort_index()
print("nan: %d" % dfv[np.nan].sum())
print("1: %d" % dfv[1].sum())
print("3: %d" % dfv[3].sum())
print("total: %d" % dfv[:].sum())
Run Code Online (Sandbox Code Playgroud)

输出:

nan: 0
1: 1
3: 3
total: 4
Run Code Online (Sandbox Code Playgroud)

期望的输出是:

nan: 2
1: 1
3: 3
total: 6
Run Code Online (Sandbox Code Playgroud)

我使用pandas 0.17和Python 3.5.0与Anaconda 2.4.0.

ily*_*nam 23

要仅计算空值,您可以使用isnull():

In [11]:
dfd.isnull().sum()

Out[11]:
a    2
dtype: int64
Run Code Online (Sandbox Code Playgroud)

a是列名称,列中有2次出现空值.


Ale*_*ley 15

如果您只想计算'a'DataFrame 列中的NaN值df,请使用:

len(df) - df['a'].count()
Run Code Online (Sandbox Code Playgroud)

这里count()告诉我们非NaN值的数量,并从值的总数中减去(由给定len(df)).

要计算列中的NaN值df,请使用:

len(df) - df.count()
Run Code Online (Sandbox Code Playgroud)

如果你想使用value_counts,告诉它不要通过设置dropna=False(添加在0.14.1中)来删除NaN值:

dfv = dfd['a'].value_counts(dropna=False)
Run Code Online (Sandbox Code Playgroud)

这样也可以计算列中的缺失值:

 3     3
NaN    2
 1     1
Name: a, dtype: int64
Run Code Online (Sandbox Code Playgroud)

其余代码应该按预期工作(请注意,没有必要调用sum;只需要print("nan: %d" % dfv[np.nan])足够).