如何使用另一列作为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中使用search
和group
。
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