gpt4 book ai didi

python - 循环正则表达式以通过多个名称-值组合提取列

转载 作者:行者123 更新时间:2023-12-01 07:47:55 30 4
gpt4 key购买 nike

我有一个数据框,其列名称为 v1,...,v99, tm1,...tm99 等。但并非每个数字都存在一列(缺少 mybe v42)。字母可以从 a 到 zzz 不等。我编写了一种方法,根据字母组合(如 'v''tm')后跟数字来过滤我的列。这看起来像

def create_required_dataset(df, var_filter):
persDf = df.filter(regex=('^' + var_filter + r'[0-9]+$'))
return persDf

这有效create_required_dataset('v'),我收到一个数据帧,其中所有列均以v开头,后跟数字。

并且工作正常。但现在我不仅要提供一个字母组合 ('tm', 'zzz'),还要提供用户输入的任意多个字母组合。

因此查询应如下所示:

create_required_dataset('v', 'tm', 'zz')

我尝试的是使用*args,所以我将我的方法重写为

def create_required_dataset(df, *args):
persDf = df.filter(regex=('^' + args + r'[0-9]+$'))
return persD

但这不起作用,即使我将元组转换为列表。显然,因为regex只需要一个字符串。我考虑过应用 regex 函数的 Lambda-Apply 方法,但无法让它正常工作。我现在不知道如何实现这一点,需要一些帮助。我

最佳答案

您可以使用基于交替的模式,只需用非捕获组包装替代模式

persDf = df.filter(regex=('^(?:{})[0-9]+$'.format('|'.join(args))))

这将创建一个像 ^(?:v|tm|zz)[0-9]+$ 这样的正则表达式,这意味着:

  • ^ - 字符串开头
  • (?:v|tm|zz) - 任何替代方案:v、或tm、或zz
  • [0-9]+ - 1+ 位数字
  • $ - 字符串结尾。

请参阅regex demoits graph :

enter image description here

关于python - 循环正则表达式以通过多个名称-值组合提取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56358753/

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