我有一个1600 x 115,316的DataFrame,主要是NaN。我想删除每个列中没有两个以上值的列。我已经写了一些有效的代码但是活着需要很长时间。
for eachColumn in df.columns:
if np.sum(df[eachColumn]) <= 2:
df.drop(eachColumn, axis=1, inplace=True)
有没有更好的方法来完成我在这里要做的事情?
答案 0 :(得分:3)
以下是一些示例数据:
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
给出一个Bool的DataFrame,用~
翻转Trues / Falses,求和每列非空的计数,选择总和小于2的列(列1)并放弃./