给定一个pandas数据框架,其中包含可能分散在这里和那里的NaN值:
问:如何确定哪些列包含NaN值?特别是,我能得到包含nan的列名的列表吗?
给定一个pandas数据框架,其中包含可能分散在这里和那里的NaN值:
问:如何确定哪些列包含NaN值?特别是,我能得到包含nan的列名的列表吗?
当前回答
这是其中一种方法。
import pandas as pd
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan],'c':[np.nan,2,np.nan], 'd':[np.nan,np.nan,np.nan]})
print(pd.isnull(df).sum())
在这里输入图像描述
其他回答
更新:使用熊猫0.22.0
更新的Pandas版本有新的方法“DataFrame.isna()”和“DataFrame.notna()”
In [71]: df
Out[71]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [72]: df.isna().any()
Out[72]:
a True
b True
c False
dtype: bool
作为列列表:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
选择这些列(至少包含一个NaN值):
In [73]: df.loc[:, df.isna().any()]
Out[73]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
旧的回答:
尝试使用isnull():
In [97]: df
Out[97]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [98]: pd.isnull(df).sum() > 0
Out[98]:
a True
b True
c False
dtype: bool
或者像@root提出的更清晰的版本:
In [5]: df.isnull().any()
Out[5]:
a True
b True
c False
dtype: bool
In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']
要选择一个子集-所有列至少包含一个NaN值:
In [31]: df.loc[:, df.isnull().any()]
Out[31]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
您可以使用df.isnull().sum()。它显示了每个特征的所有列和总nan。
我使用这三行代码打印出包含至少一个空值的列名:
for column in dataframe:
if dataframe[column].isnull().any():
print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))
df.isna()返回NaN值为True,其余为False。所以,做:
.any df.isna () ()
将返回True的任何列有NaN, False的其余
Features_with_na =[feature用于数据帧中的特征。列if dataframe[features].isnull().sum()>0]
对于features_with_na中的feature: Print (feature, np.round(dataframe[feature].isnull().mean(), 4), '%缺失值') 打印(features_with_na)
它将为dataframe中的每一列提供缺失值的%