我有一个200列以上的pandas数据框。我正在尝试检查具有空数据的所有列。如何过滤/显示具有空数据的列? df.isnull()。sum()列出了所有列的计数,但是我想只查看具有非零空数据计数的列,因为列数很高。
答案 0 :(得分:3)
较新的Pandas版本具有新方法DataFrame.isna()和DataFrame.notna()
1)使用DataFrame.isna()
方法!
>>> df
A B C D E F
0 0 1.0 2.0 3 4 one
1 3 5.0 NaN NaT 5 two
2 8 NaN 10.0 None 6 three
3 11 12.0 13.0 NaT 7 four
仅获取为空值的列列表:
>>> df.columns[df.isna().any()].tolist()
['B', 'C', 'D']
列出所有具有nan值的列。
>>> df.loc[:, df.isna().any()]
B C D
0 1.0 2.0 3
1 5.0 NaN NaT
2 NaN 10.0 None
3 12.0 13.0 NaT
2)使用DataFrame.isnull()
方法!
要获取仅是空值的列列表,返回类型为布尔值。
>>> df.isnull().any()
A False
B True
C True
D True
E False
F False
dtype: bool
仅获取具有值的null的列列表:
>>> df.columns[df.isnull().any()].tolist()
['B', 'C', 'D']
要选择一个子集-所有列至少包含一个NaN
值:
>>> df.loc[:, df.isnull().any()]
B C D
0 1.0 2.0 3
1 5.0 NaN NaT
2 NaN 10.0 None
3 12.0 13.0 NaT
如果要计算每列中的缺失值:
>>> df.isnull().sum()
A 0
B 1
C 1
D 3
E 0
F 0
dtype: int64
OR
>>> df.isnull().sum(axis=0) # axis=0 , across the columns
A 0
B 1
C 1
D 3
E 0
F 0
# >>> df.isnull().sum(axis=1) # across the rows
最后,要获取DataFrame中的NaN和非NaN值的总数:
Nan值计数
>>> df.isnull().sum().sum()
非NaN值计数
>>> df.notnull().sum().sum()
答案 1 :(得分:0)
一旦有了计数,就可以过滤大于零的条目:
null_counts = df.isnull().sum()
null_counts[null_counts > 0]