首页 > 解决方案 > 使用 re.compile 迭代 pandas 数据帧

问题描述

我有这个正则表达式函数来提取实体之一

Entity_regex = re.compile(r'(Entity1:)(\s*)((?:[a-zA-Z0-9-/]*)(\s[A_Z]))' , re.IGNORECASE|re.DOTALL)
            match = re.search(Entity_regex, text)
            if match:
                Entity1 = match.group(3)
            else:
                Entity1 = 'NA'

这对实体来说很好用。

同样,我要从文本文件中提取许多实体。我已经用实体搜索词和它们的模式制作了数据框,如下所示的两列;

Entity          Regex
Entity1:        (?:[a-zA-Z0-9-/]*)(\s[A_Z])
Entity2:        (\d{4}-\d{2}-\d{2} \d{2}:\d{2} - \d{4}-\d{2}-\d{2} d{2}:\d{2})

我尝试了一个for循环来迭代df,使用这样的iterrows来创建一个包含文本文件中所有实体的最终数据框

for index, row in df.iterrows():
    row['Entity']=re.compile(r'(row['Entity'])(\s*)(row['Regex']') , re.IGNORECASE|re.DOTALL)
    match = re.search(row['Entity'], text)
    if match:
        row['Entity'] = match.group(3)
    else:
        row['Entity'] = 'NA'

得到这样的错误:

 row['Entity']=re.compile(r'(row['Entity'])(\s*)(row['Regex']') , re.IGNORECASE|re.DOTALL)
                                          ^
SyntaxError: invalid syntax

标签: python

解决方案


它说语法无效,并确实将您指向正确的位置。如果您仔细查看代码,您会发现字符串中有语音标记,这将结束字符串并导致语法错误。您应该改用这一行:

row['Entity']=re.compile((r'({})(\s*)({})').format(row['Entity'],row['Regex']) , re.IGNORECASE|re.DOTALL)

推荐阅读