我是编码新手,我通常为此使用 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)
慕后森
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
添加回答
举报
0/150
提交
取消