python - pandas DataFrame 有效删除列

标签 python pandas dataframe

我有一个 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/

相关文章:

python - 当我执行循环时,如何在数据框中添加额外的行

python - 使用列的 MultiIndex 将高 DataFrame 转换为宽格式

python - 过滤掉具有公共(public)字段且至少有一个满足条件的行

python - 为什么在 LSTM 中添加 relu 激活后出现 Nan?

python - 当 'None' 或没有传递参数时,如何接受函数中的默认参数?

python - pandas 在多索引级别匹配上减去

python - Pandas 中特定列的特定值的总和

python - 将字段映射到同一 pandas 数据框中的拉取值

Python pyCrypto RSA 加密方法使用私钥或公钥给出相同的结果

python - 如何在点击后删除 tkinter 中的消息