给定一个pandas数据框架,其中包含可能分散在这里和那里的NaN值:

问:如何确定哪些列包含NaN值?特别是,我能得到包含nan的列名的列表吗?


当前回答

要查看包含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)

其他回答

您可以使用df.isnull().sum()。它显示了每个特征的所有列和总nan。

这两种方法都有效:

df.isnull().sum()
df.isna().sum()

DataFrame方法isna()或isnull()完全相同。

注意:空字符串”被认为是False(不认为是NA)

df.isna()返回NaN值为True,其余为False。所以,做:

.any df.isna () ()

将返回True的任何列有NaN, False的其余

我有一个问题,我必须有许多列在屏幕上进行视觉检查,所以一个筛选并返回违规列的短列表比较

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值的列并获得列名列表,则该代码可以工作。

na_names = df.isnull().any()
list(na_names.where(na_names == True).dropna().index)

如果要查找值都是nan的列,可以将any替换为all。