在熊猫的正则表达式中使用列名

时间:2021-06-16 15:55:14

标签: regex pandas

我使用:

df[df['A'].astype(str).str.contains("^XYZ|^$", regex=True)]

选择 A 列中的值以模式 ('XYZ') 开头或为空字符串的行。我需要使用另一列(例如“B”列)的值而不是 XYZ。如何在正则表达式中包含此列的名称?甚至有可能吗?

1 个答案:

答案 0 :(得分:1)

一个可能的解决方案是将 re.searchDataFrame.apply() 一起使用:

import pandas as pd
import re
df = pd.DataFrame(
    {'A':['XYZ won the match.', '', 'ZYX lost.'],
     'B':['XYZ', 'WORD', 'BAC']
    })
df[df.apply(lambda row: bool(re.search(fr"^{re.escape(row['B'])}|^$", row['A'])), axis=1)]
## If the values in Column B are valid regexps:
# df[df.apply(lambda row: bool(re.search(fr"^{row['B']}|^$", row['A'])), axis=1)]

输出:

                    A     B
0  XYZ won the match.   XYZ
1                      WORD

注意 fr"^{re.escape(row['B'])}|^$ 部分从 row['B'] 值动态构建模式,并且字符串中的所有特殊字符都使用 re.escape 转义以避免正则表达式匹配问题。如果 B 列中的值是有效的正则表达式,则不需要 re.escape