为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 的数据帧行中提取正则表达式匹配项,而不是组

在 Python 的数据帧行中提取正则表达式匹配项,而不是组

30秒到达战场 2022-01-18 17:30:18
我是编码新手,我通常为此使用 R (stringr),但我也开始学习 Python 的语法。我有一个数据框,其中一列是从导入的 excel 文件生成的。此列中的值包含大写和小写字符、符号和数字。我想根据正则表达式模式在数据框中生成第二列,其中仅包含第一列中包含的一些单词。df = pd.DataFrame(["THIS IS A TEST 123123. s.m.", "THIS IS A Test test 123 .s.c.e", "TESTING T'TEST 123 da."],columns=['Test'])df现在,要提取我想要的内容(大写的单词),在 RI 中通常会使用:df <- str_extract_all(df$Test, "\\b[A-Z]{1,}\\b", simplify = FALSE)提取不同数据框行中正则表达式的匹配项,即:* THIS IS A TEST* THIS IS A* TESTING T TEST我找不到类似的 Python 解决方案,最接近的是以下解决方案:df["Name"] = df["Test"].str.extract(r"(\b[A-Z]{1,}\b)", expand = True)不幸的是,这不起作用,因为它只导出组而不是正则表达式的匹配项。我尝试了多种策略,但str.extractall似乎也不起作用(“TypeError:插入列的索引与框架索引不兼容)如何使用 Python 提取我想要的信息?谢谢!
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

如果我理解得很好,您可以尝试:

df["Name"] = df["Test"].str.extractall(r"(\b[A-Z]{1,}\b)")
                       .unstack().fillna('').apply(' '.join, 1)

[编辑]:这是我通过查看文档发现的较短版本:

 df["Name"] = df["Test"].str.extractall(r"(\b[A-Z]{1,}\b)").unstack(fill_value='').apply(' '.join, 1)


查看完整回答
反对 回复 2022-01-18
?
慕后森

TA贡献1802条经验 获得超5个赞

你在获得模式的正确轨道上。此解决方案使用正则表达式、连接和映射。


 df['Name'] = df['Test'].map(lambda x: ' '.join(re.findall(r"\b[A-Z\s]+\b", x)))

结果:


  Test  Name

0   THIS IS A TEST 123123. s.m.     THIS IS A TEST

1   THIS IS A Test test 123 .s.c.e  THIS IS A

2   TESTING T'TEST 123 da.          TESTING T TEST


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信