如何用Pandas提取连字符前后以指定子串结尾的特定文本?
嘿,作为Pandas新手,处理这种文本提取确实需要点小技巧~我来帮你搞定这个问题!
先确认下你的原始数据,咱们先把代码摆出来:
import pandas as pd df = pd.DataFrame({'id': ["1", "2", "3","4","5"], 'mill': ["Company A Palm Oil Mill – Special Company A of CC Ltd", "Company X POM – Company X Ltd", "DDDD Mill – Company New and Old Ltd", "Company Not Special – R Mill", "Greatest Company – Great World POM"]})
第一步:先把连字符前后的内容分开
注意你的连字符是中文破折号(–),而且前后带空格,所以我们用Pandas的str.split方法直接分割成两列:
# expand=True会把分割结果拆成两个新列,分别存连字符前后的内容 df[['mill_section', 'company_section']] = df['mill'].str.split(' – ', expand=True)
跑完这行,你就会得到mill_section(连字符前的内容)和company_section(连字符后的内容)两个新列,方便后续提取。
第二步:提取以指定子串结尾的文本
假设你想要的是:
- 从
mill_section里提取以Mill或POM结尾的完整文本 - 从
company_section里提取以Ltd结尾的完整文本
咱们用正则表达式配合str.extract来实现,新手也能轻松上手:
提取Mill/POM结尾的厂房名称
# 正则表达式的意思是:匹配从开头到结尾,最后是Mill或POM的整个字符串 df['extracted_mill'] = df['mill_section'].str.extract(r'(.*(Mill|POM))$')
提取Ltd结尾的公司名称
# 同理,匹配到结尾是Ltd的完整字符串 df['extracted_company'] = df['company_section'].str.extract(r'(.*Ltd)$')
完整可运行代码
把所有步骤整合起来,直接复制就能跑:
import pandas as pd df = pd.DataFrame({'id': ["1", "2", "3","4","5"], 'mill': ["Company A Palm Oil Mill – Special Company A of CC Ltd", "Company X POM – Company X Ltd", "DDDD Mill – Company New and Old Ltd", "Company Not Special – R Mill", "Greatest Company – Great World POM"]}) # 分割连字符前后内容 df[['mill_section', 'company_section']] = df['mill'].str.split(' – ', expand=True) # 提取目标厂房文本 df['extracted_mill'] = df['mill_section'].str.extract(r'(.*(Mill|POM))$') # 提取目标公司文本 df['extracted_company'] = df['company_section'].str.extract(r'(.*Ltd)$') # 打印结果看看 print(df)
如果你的“指定子串”不是Mill/POM或Ltd,只需要修改正则表达式里的内容就行~比如要提取以“Factory”结尾的,就把(Mill|POM)改成Factory。
内容的提问来源于stack exchange,提问作者Funkeh-Monkeh
相关产品推荐
相关产品推荐

