我有一个 1600 x 115,316 的 DataFrame,大部分为 NaN。我想删除其中不包含两个以上值的每一列。我已经编写了一些有效的代码,但是人活着需要很长时间。
for eachColumn in df.columns:
if np.sum(df[eachColumn]) <= 2:
df.drop(eachColumn, axis=1, inplace=True)
有更好的方法来完成我在这里想做的事情吗?
最佳答案
以下是一些示例数据:
In [18]: df = pd.DataFrame(np.ones(shape=(10, 2))) * np.nan
In [19]: df.iloc[[2, 3], 0] = 2
因此列 0
有 2 个非 NaN。保留它并删除 1
。
In [20]: df.drop(df.columns[(~df.isnull()).sum() < 2], axis=1)
Out[20]:
0
0 NaN
1 NaN
2 2
3 2
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
把它从头到尾读一遍。 .isnull
给出 Bools 的 DataFrame,用 ~
翻转 True/False,求和以获取每列非空的计数,选择其中的列总和小于 2(第 1 列)并删除它。/
关于python - pandas DataFrame 有效删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28527465/