gpt4 book ai didi

python - 删除具有 >N NaN 的列,不包括特定列

转载 作者:行者123 更新时间:2023-11-28 20:35:44 25 4
gpt4 key购买 nike

我想知道是否有一种明智的方法可以排除所有超过 N 个 NaN 的列,从该子集中排除一列。

例如:

df = pd.DataFrame([[np.nan, 2, np.nan, 0], 
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5]],
columns=list('ABCD'))

结果:

    A   B   C   D
0 NaN 2.0 NaN 0
1 3.0 4.0 NaN 1
2 NaN NaN NaN 5

运行以下命令,我得到:

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

B D
0 2.0 0
1 4.0 1
2 NaN 5

我想保留“C”列。即,在“C”列之外执行此阈值处理。

这可能吗?

最佳答案

完成阈值后,您可以将列放回原位。如果您在一行中完成所有这些操作,您甚至不需要存储对该列的引用。

import pandas as pd
import numpy as np

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5]],
columns=list('ABCD'))
df.dropna(thresh=2, axis=1).assign(C=df['C'])

你也可以这样做

C = df['C']
df.dropna(thresh=2, axis=1)
df.assign(C=C)

正如@Wen 所建议的,您还可以执行一个不会删除列 C 的索引操作。

threshold = 2
df = df.loc[:, (df.isnull().sum(0) < threshold) | (df.columns == 'C')]

此处的列索引将选择具有小于 threshold NaN 值的列,或者其名称为 C 的列。如果您想在异常中包含不止一列,您可以使用“或”运算符 | 链接更多条件。例如:

df = df.loc[
:,
(df.isnull().sum(0) < threshold) |
(df.columns == 'C') |
(df.columns == 'D')]

关于python - 删除具有 >N NaN 的列,不包括特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46327501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com