You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于最后一个后接全大写字符串的' - '拆分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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:08:34