Pandas:如何使用str.extractall和另一列作为模式输入?

q8l4jmvw  于 2023-04-10  发布在  其他
关注(0)|答案(1)|浏览(167)

如何使用另一列作为str.extract/all的模式?下面的例子使用了一个硬编码的模式,但我希望Pandas查看Pattern列中的每一行,并使用该模式进行提取搜索。

df = pd.DataFrame({"Pattern": ['a|c'],
                   "Files": ['a.csv, b.csv, c.csv, d.csv']})

# explode
df['Files'] = df['Files'].str.split(',')
df = df.explode(['Files'])

# extract
df['Expected'] = df['Files'].str.extract(r'([a|d])')  # hardcoded

# expected
  Pattern   Files Expected
0     a|d   a.csv        a
0     a|d   b.csv      NaN
0     a|d   c.csv      NaN
0     a|d   d.csv        d
pjngdqdw

pjngdqdw1#

自:

Series.str.extract(pat,flags=0,expand=True)

将正则表达式pat中的捕获组提取为DataFrame中的列。
对于Series中的每个主题字符串,从正则表达式pat的第一个匹配中提取组

我会在 listcomp 中使用searchgroup

import re

df["Expected"] = [re.search(f"({p})", s).group(1)
                  if re.search(f"({p})", s) else None
                  for s,p in zip(df["Files"], df["Pattern"])]

输出:

print(df)

  Pattern   Files Expected
0     a|d   a.csv        a
0     a|d   b.csv     None
0     a|d   c.csv     None
0     a|d   d.csv        d

相关问题