我有一个DataFrame,其中一些列有NaN
个值。我想删除所有没有至少一个NaN
值的列。
我可以通过创建填充了布尔值的数据框来识别NaN
值(True
代替NaN
值,否则为False
:
data.isnull()
然后,我可以通过创建一系列具有关联布尔值的列名来识别包含至少一个NaN
值的列(True
,如果该列包含至少一个{{1} }},否则为NaN
:
False
当我尝试使用此系列删除不包含至少一个data.isnull().any(axis = 0)
值的列时,我遇到了一个问题:不包含NaN
值的列将被删除:< / p>
NaN
我该怎么做?
答案 0 :(得分:1)
考虑数据框df
df = pd.DataFrame([
[1, 2, None],
[3, None, 4],
[5, 6, None]
], columns=list('ABC'))
df
A B C
0 1 2.0 NaN
1 3 NaN 4.0
2 5 6.0 NaN
IIUC:
<强> pandas
强>
带有dropna
参数
thresh
df.dropna(1, thresh=2)
A B
0 1 2.0
1 3 NaN
2 5 6.0
loc
+布尔索引
df.loc[:, df.isnull().sum() < 2]
A B
0 1 2.0
1 3 NaN
2 5 6.0
答案 1 :(得分:0)
我使用@ piRSquared答案的样本DF。
如果你想要"to drop the columns that do not contain at least one NaN value"
:
In [19]: df
Out[19]:
A B C
0 1 2.0 NaN
1 3 NaN 4.0
2 5 6.0 NaN
In [26]: df.loc[:, df.isnull().any()]
Out[26]:
B C
0 2.0 NaN
1 NaN 4.0
2 6.0 NaN