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()即使只有一个值也不会标记列!
| 归档时间: |
|
| 查看次数: |
27182 次 |
| 最近记录: |