Pandas:我如何使用string .extractall与另一列作为模式输入?



如何使用另一列作为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

Since:

Series.str.extract(帕特,旗帜= 0,
将regex部分中的捕获组提取为DataFrame中的列。

对于系列中的每个主题字符串,从第一个主题字符串中提取组匹配正则表达式pat.

来源: [pandas.docs]

我会在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

相关内容

  • 没有找到相关文章

最新更新