熊猫选择所有没有 NaN 的列

Hri*_*hev 5 python null select pandas

我有一个 200 列的 DF。它们中的大多数都带有 NaN。我想选择没有 NaN 或至少具有最小 NaN 的所有列。我试图用阈值或 notnull() 删除所有内容,但没有成功。有任何想法吗。

df.dropna(thresh=2, inplace=True)
df_notnull = df[df.notnull()]
Run Code Online (Sandbox Code Playgroud)

DF例如:

col1  col2 col3
23     45  NaN
54     39  NaN
NaN    45  76
87     32  NaN
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

 df.dropna(axis=1, thresh=2)

    col1  col2
    23     45  
    54     39  
    NaN    45  
    87     32  
Run Code Online (Sandbox Code Playgroud)

Vai*_*ali 15

您可以使用非 NaN 列创建

df = df[df.columns[~df.isnull().all()]]
Run Code Online (Sandbox Code Playgroud)

或者

null_cols = df.columns[df.isnull().all()]
df.drop(null_cols, axis = 1, inplace = True)
Run Code Online (Sandbox Code Playgroud)

如果您希望根据一定百分比的 NaN 删除列,请将数据超过 90% 的列设为空

cols_to_delete = df.columns[df.isnull().sum()/len(df) > .90]
df.drop(cols_to_delete, axis = 1, inplace = True)
Run Code Online (Sandbox Code Playgroud)


小智 13

df[df.columns[~df.isnull().any()]]将为您提供一个仅包含没有空值的列的 DataFrame,并且应该是解决方案。

df[df.columns[~df.isnull().all()]]只删除仅包含空值的列,并留下包含一个非空值的列。

df.isnull()将返回与 df 形状相同的布尔值数据框。如果特定值为 null,则这些布尔值为 True,否则为 False。

df.isnull().any()即使有一个空值,也会对所有列返回 True。这就是我与接受的答案不同的地方,因为df.isnull().all()即使只有一个值也不会标记列!