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

Pandas 如何提取列开头首个数字生成新列并移除原列对应数字

Pandas 提取字符串起始位置数字并移除的实现方案

问题根因

之前的实现存在两个匹配逻辑的问题:

  • 提取数字时没有锚定字符串的起始位置,正则会全局扫描字符串找第一个出现的数字,导致像"third 3"这类开头为字母的字符串,会错误匹配到末尾的数字3
  • 直接全局替换数字会无差别删掉字符串中所有位置的数字,无法精准定位需要移除的开头数字,误删需要保留的其他位置数字

分步骤实现

  • 首先导入依赖并构造原始测试DataFrame
    import pandas as pd
    data = {"col1" : ["1 first 1", "2 second 2", "third 3", "4 fourth 4"]}
    df = pd.DataFrame(data)
    
  • 修正数字提取逻辑:在正则中加入^锚定字符串绝对起始位置,仅提取开头位置的数字,无匹配时自动返回NaN
    # 提取仅位于字符串起始位置的单个数字
    df["index"] = df["col1"].str.extract(r'^(\d)')
    
    这一步执行后,third 3因为开头无数字,对应index列会正确返回NaN,不再错误提取末尾的3。
  • 精准移除col1中被提取的开头数字:同样用^锚定匹配范围,仅删除字符串最开头的数字以及数字后面紧跟的空白字符,完全保留其他位置的内容和数字
    # 只替换字符串开头的数字及后续空白,不影响其他位置内容
    df["col1"] = df["col1"].str.replace(r'^\d\s*', '', regex=True)
    

最终运行结果

执行完上述代码后,输出的DataFrame完全符合预期:

col1  index
0   first 1    1
1  second 2    2
2    third 3    NaN
3  fourth 4    4

关键注意事项

  • 正则中的^是核心锚点,没有这个标识的话,匹配逻辑会变成全字符串扫描,出现位置误判
  • 替换操作必须和提取操作的位置规则保持一致,不能全局替换数字,否则会把字符串末尾、中间需要保留的数字全部误删

内容的提问来源于stack exchange,提问作者Ailurophile

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 23:06:00