在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())
输出:
nan: 0 1: 1 3: 3 total: 4
期望的输出是:
nan: 2 1: 1 3: 3 total: 6
我使用pandas 0.17和Python 3.5.0与Anaconda 2.4.0.
要仅计算空值,您可以使用isnull()
:
In [11]: dfd.isnull().sum() Out[11]: a 2 dtype: int64
这a
是列名称,列中有2次出现空值.
如果您只想计算'a'
DataFrame 列中的NaN值df
,请使用:
len(df) - df['a'].count()
这里count()
告诉我们非NaN值的数量,并从值的总数中减去(由给定len(df)
).
要计算每列中的NaN值df
,请使用:
len(df) - df.count()
如果你想使用value_counts
,告诉它不要通过设置dropna=False
(添加在0.14.1中)来删除NaN值:
dfv = dfd['a'].value_counts(dropna=False)
这样也可以计算列中的缺失值:
3 3 NaN 2 1 1 Name: a, dtype: int64
其余代码应该按预期工作(请注意,没有必要调用sum
;只需要print("nan: %d" % dfv[np.nan])
足够).