猿问

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

我是编码新手,我通常为此使用 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 提取我想要的信息?


谢谢!


30秒到达战场
浏览 171回答 2
2回答

湖上湖

如果我理解得很好,您可以尝试:df["Name"]&nbsp;=&nbsp;df["Test"].str.extractall(r"(\b[A-Z]{1,}\b)") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.unstack().fillna('').apply('&nbsp;'.join,&nbsp;1)[编辑]:这是我通过查看文档发现的较短版本:&nbsp;df["Name"]&nbsp;=&nbsp;df["Test"].str.extractall(r"(\b[A-Z]{1,}\b)").unstack(fill_value='').apply('&nbsp;'.join,&nbsp;1)

慕后森

你在获得模式的正确轨道上。此解决方案使用正则表达式、连接和映射。&nbsp;df['Name'] = df['Test'].map(lambda x: ' '.join(re.findall(r"\b[A-Z\s]+\b", x)))结果:&nbsp; Test&nbsp; Name0&nbsp; &nbsp;THIS IS A TEST 123123. s.m.&nbsp; &nbsp; &nbsp;THIS IS A TEST1&nbsp; &nbsp;THIS IS A Test test 123 .s.c.e&nbsp; THIS IS A2&nbsp; &nbsp;TESTING T'TEST 123 da.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TESTING T TEST
随时随地看视频慕课网APP

相关分类

Python
我要回答