如何在Pandas DataFrame列中按单词'at'精准拆分文本?
解决Pandas中精准拆分Job列的问题
嘿,这个拆分问题我之前处理类似数据时也踩过坑!咱们来拆解下问题,然后给出靠谱的解决方案~
先分析你遇到的两个问题
- 尝试1用
df.Job.str.split('at',1):这个写法是直接匹配字符串里所有的'at',不管它是不是独立的单词,所以会误拆像"Operating"这种单词内部的'at',完全不符合需求。 - 尝试2用
df.Job.str.split(' at ',1):结果全是None,大概率是你的原始数据里,"at"前后的空白字符不是恰好一个空格——可能是多个空格、制表符,甚至有的是大写的"At"/"AT",导致精确匹配' at '完全找不到匹配项。
精准拆分的解决方案:用正则表达式匹配独立的"at"
我们需要匹配作为独立分隔符的"at":前后有任意数量的空白字符,并且不区分大小写,同时只拆分一次(避免公司名称里意外出现"at"的情况)。
直接上代码:
import pandas as pd import re # 模拟你的数据(包含多种空格、大小写情况) df = pd.DataFrame({ 'Job': [ "Operation Manager at Barclays", "Chief Operating Officer at Llyods", "Senior Analyst at HSBC", # 两个空格 "Marketing Lead At Morgan Stanley", # 大写At "Sales Director at Goldman Sachs" # 多个空格 ] }) # 正则拆分:拆分成职位和公司列 df[['Job_Title', 'Company_Location']] = df['Job'].str.split( r'\s+at\s+', # \s+匹配1个或多个空白字符(空格、制表符都算) n=1, # 只拆分第一次出现的匹配项 expand=True, # 直接拆分成DataFrame的两列 flags=re.IGNORECASE # 忽略大小写,匹配at/At/AT等 ) # 查看结果 print(df)
运行后你会看到所有情况都被正确拆分,不会误拆单词内部的"at",同时兼容各种空白字符和大小写的场景。
补充说明
\s+:比固定的空格更灵活,能处理数据里的各种空白格式问题;n=1:确保只拆分第一个符合条件的"at",避免后续内容被误拆;flags=re.IGNORECASE:覆盖数据里可能存在的大小写不一致情况。
内容的提问来源于stack exchange,提问作者user8322222
相关产品推荐
相关产品推荐

