gpt4 book ai didi

python - 如何基于部分匹配选择DataFrame列?

转载 作者:太空狗 更新时间:2023-10-29 22:03:32 26 4
gpt4 key购买 nike

今天下午我一直在努力寻找一种方法来选择我的 Pandas DataFrame 中的几列,方法是检查名称(标签?)中特定模式的出现。

我一直在为 nd.arrays/pd.series 寻找类似 containsisin 的东西,但没有运气。

这让我很沮丧,因为我已经在检查我的 DataFrame 的列是否出现了特定的字符串模式,如:

hp = ~(df.target_column.str.contains('some_text') | df.target_column.str.contains('other_text'))
df_cln= df[hp]

但是,无论我怎么撞脑袋,我都无法将 .str.contains() 应用于 df.columns 返回的对象 - 这是一个 Index - 也不是 df.columns.values 返回的索引 - 这是一个 ndarray。这适用于“切片”操作 df[column_name] 返回的内容,即 Series

我的第一个解决方案涉及 for 循环和帮助列表的创建:

ll = []
for a in df.columns:
if a.startswith('start_exp1') | a.startswith('start_exp2'):
ll.append(a)
df[ll]

(当然,可以应用任何 str 函数)

然后,我找到了 map 函数并让它与下面的代码一起工作:

import re
sel = df.columns.map(lambda x: bool(re.search('your_regex',x))
df[df.columns[sel]]

当然,在第一个解决方案中,我可以执行相同类型的正则表达式检查,因为我可以将它应用于迭代返回的 str 数据类型。

我是 Python 的新手,从来没有真正编程过任何东西,所以我不太熟悉速度/时间/效率,但我倾向于认为第二种方法——使用 map ——可能会更快,而且看起来更优雅对于我未经训练的眼睛。

我很想知道您对此有何看法,以及可能的替代方案。考虑到我的菜鸟程度,如果您能纠正我在代码中可能犯的任何错误并为我指明正确的方向,我将不胜感激。

谢谢, 米歇尔

编辑:我刚刚找到了 Index 方法 Index.to_series(),它返回 - 嗯 - 一个 Series 我可以应用 .str.contains('whatever')。但是,这不如真正的正则表达式强大,我找不到将 Index.to_series().str 的结果传递给 re.search()< 的方法 函数..

最佳答案

通过部分字符串选择列,可以通过以下方式简单地完成:

df.filter(like='hello')  # select columns which contain the word hello

而要通过部分字符串匹配来选择行,您可以将 axis=0 传递给过滤器:

df.filter(like='hello', axis=0) 

关于python - 如何基于部分匹配选择DataFrame列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551412/

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