python - Pandas 根据列名删除列

标签 python pandas

全部

假设有一个带有一些列名称的 df - 在我的例子中,名称是数值。例如,名为 1000、1001 等的列。我需要删除所有未通过特定过滤器测试的内容 - 在我的例子中,所有名称小于特定值的列。假设少于 1500...

我知道如何直接执行此操作(通过列出每一列),或者通过在循环中调用 drop,但它似乎效率很低。我在表达它时遇到语法困难..

我试过这样的:

df.drop(df.columns[x for x in df.columns.values<str(1500)], axis=1))

df.drop(df.columns.values<str(1500)], axis=1)

但这些显然是错误的。

请指教! 谢谢

最佳答案

我认为最简单的是创建 bool 掩码,然后使用 loc 选择:

df = pd.DataFrame(columns=range(10), index=[0]);
print (df)
     0    1    2    3    4    5    6    7    8    9
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

#inverting boolean mask with ~
print (df.loc[:, ~(df.columns < 8)])
     8    9
0  NaN  NaN

print (df.columns >= 8)
[False False False False False False False False  True  True]

print (df.loc[:, df.columns >= 8])
     8    9
0  NaN  NaN

drop 相同的内容通过过滤列名:

print (df.columns[df.columns < 8])
Int64Index([0, 1, 2, 3, 4, 5, 6, 7], dtype='int64')


print (df.drop(df.columns[df.columns < 8], axis=1))

     8    9
0  NaN  NaN

关于python - Pandas 根据列名删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42888522/

相关文章:

python - Django DateTimeField() 和 timezone.now()

python - pandas:将列表转换为 int64index

python - 比较同一数据框中的两个数据框列并返回第一列中包含的文本

python - panda的多索引的好处?

python - numpy 数组模块未定义

python - Django - 删除对象,保持 parent ?

python - 导入 Keras 时出错

类中的Python调用方法

python - Pandas 从一系列混合数据中找到最大值

python - Pandas 将列转换为时间