基于最后一个后接全大写字符串的' - '拆分Pandas列
高效拆分Pandas DataFrame列:按最后一个接全大写字符串的' - '分隔
需求场景
需要将Pandas DataFrame的Value列,按**最后一个后接全大写字符串的' - '**分隔符拆分为First和Last两列。示例DataFrame如下:
import pandas as pd df = pd.DataFrame({ 'Value': [ 'Juan-Diva - HOLLS', 'Carlos - George - ESTE BAN - BOM', 'Javier Plain - Hotham Ham - ALPINE', 'Yul - KONJ KOL MON'], })
预期输出:
First Last 0 Juan-Diva HOLLS 1 Carlos - George ESTE BAN - BOM 2 Javier Plain - Hotham Ham ALPINE 3 Yul KONJ KOL MON
最优高效解法
直接使用str.rsplit()从右侧按分隔符拆分1次,这是最简洁且高效的方案,完全符合预期结果:
df[["First", "Last"]] = df["Value"].str.rsplit(" - ", n=1, expand=True)
执行后即可得到完全匹配预期的First和Last列,且处理速度极快,哪怕是大规模数据集也能瞬间完成。
各尝试方法的问题分析
Option1:
第一次从左拆分1次会导致First列只取到第一个-前的内容(比如第二行First会是Carlos,而非预期的Carlos - George),同时Last列用split('- ').str[-1]会错误地提取最后一个-后的片段(第二行Last会是BOM,而非完整的ESTE BAN - BOM),结果完全不符合要求。Option2:
正则表达式r'^(.*) - ([A-Z\s]+)$中的[A-Z\s]+不包含横杠,无法匹配Last列中带-的全大写内容(比如ESTE BAN - BOM),会导致Last列提取不完整,最终结果错误。Option4:
正则表达式过于复杂,使用了非贪婪匹配和嵌套分组,导致Pandas的字符串处理引擎效率极低,哪怕仅数百行数据也会出现严重性能问题,完全不具备实用性。
内容的提问来源于stack exchange,提问作者jonboy
相关产品推荐
相关产品推荐

