给定一个pandas数据框架,其中包含可能分散在这里和那里的NaN值:
问:如何确定哪些列包含NaN值?特别是,我能得到包含nan的列名的列表吗?
给定一个pandas数据框架,其中包含可能分散在这里和那里的NaN值:
问:如何确定哪些列包含NaN值?特别是,我能得到包含nan的列名的列表吗?
当前回答
df.columns[df.isnull().any()].tolist()
它将返回包含空行的列的名称
其他回答
更新:使用熊猫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-liner:
pd.isnull(df).sum()[pd.isnull(df).sum() > 0]
描述
在每一列中计算空值
null_count_ser = pd.isnull(df).sum()
True|False序列,描述该列是否为空
is_null_ser = null_count_ser > 0
使用T|F系列来过滤那些没有
null_count_ser[is_null_ser]
示例输出
name 5
phone 187
age 644
我有一个问题,我必须有许多列在屏幕上进行视觉检查,所以一个筛选并返回违规列的短列表比较
nan_cols = [i for i in df.columns if df[i].isnull().any()]
如果这对大家有帮助的话
此外,如果您想过滤掉nan值多于阈值的列,那么就使用85%
Nan_cols85 = [i for i in df.]if df[i].isnull().sum() > 0.85*len(data)]
要查看包含nan的列和包含nan的行:
isnulldf = df.isnull()
columns_containing_nulls = isnulldf.columns[isnulldf.any()]
rows_containing_nulls = df[isnulldf[columns_containing_nulls].any(axis='columns')].index
only_nulls_df = df[columns_containing_nulls].loc[rows_containing_nulls]
print(only_nulls_df)
这对我很有效,
1. 用于获取至少有一个空值的列。(列名称)
data.columns[data.isnull().any()]
2. 用于获取具有count的列,且至少有1个空值。
data[data.columns[data.isnull().any()]].isnull().sum()
(可选) 3.获取空计数的百分比。
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]