给定一个pandas数据帧,其中包含(可能)NaN值分散在这里和那里:
Question: 如何确定哪些列包含NaN值?特别是,我可以获得包含NaN的列名列表吗?
谢谢
UPDATE: 使用Pandas 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 值):
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
OLD answer:
尝试使用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 .
df.isnull().sum()
我使用这三行代码打印出包含至少一个空值的列名:
for column in dataframe: if dataframe[column].isnull().any(): print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))
3 回答
UPDATE: 使用Pandas 0.22.0
较新的Pandas版本有新方法'DataFrame.isna()'和'DataFrame.notna()'
作为列的列表:
选择那些列(包含至少一个
NaN
值):OLD answer:
尝试使用isnull():
或者@root提出更清晰的版本:
选择一个子集 - 包含至少一个
NaN
值的所有列:你可以使用
df.isnull().sum()
. 它显示了每个要素的所有列和总NaN .我使用这三行代码打印出包含至少一个空值的列名: