gpt4 book ai didi

python - Pandas 根据列名删除列

转载 作者:行者123 更新时间:2023-11-28 22:29:45 43 4
gpt4 key购买 nike

全部

假设有一个带有一些列名称的 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/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com