问题:如何在Pandas数据框中查找哪些列包含任何NaN值
给定一个熊猫数据框,其中包含可能在此处和此处散布的NaN值:
问题:如何确定哪些列包含NaN值?特别是,可以获取包含NaN的列名称的列表吗?
回答 0
更新:使用熊猫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
回答 1
您可以使用df.isnull().sum()。它显示了所有列以及每个功能的总NaN。
回答 2
我有一个问题,我必须在屏幕上目视检查许多列,因此筛选和返回有问题的列的简短列表组合是
nan_cols = [i for i in df.columns if df[i].isnull().any()]如果这对任何人有帮助
回答 3
在具有大量列的数据集中,最好查看有多少列包含空值而有多少列不包含空值。
print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))
print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))
print("Total no. of columns in the dataframe")
print(len(df.columns))
例如,在我的数据框中,它包含82列,其中19列至少包含一个空值。
此外,您还可以自动删除cols和row,具体取决于哪个具有更多null值
。  
df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)
注意:上面的代码删除了所有空值。如果需要空值,请先处理它们。
回答 4
我使用以下三行代码来打印出包含至少一个空值的列名:
for column in dataframe:
    if dataframe[column].isnull().any():
       print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))回答 5
这两个都应该起作用:
df.isnull().sum()
df.isna().sum()DataFrame方法isna()还是isnull()完全相同的。
注意:空字符串''被视为False(不视为NA)
回答 6
这对我有用
1.用于获取具有至少1个空值的列。(列名)
data.columns[data.isnull().any()]2.用于获取具有count且具有至少1个空值的Columns。
data[data.columns[data.isnull().any()]].isnull().sum()[可选] 3.用于获取空计数的百分比。
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
	声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

