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])足够).