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

如何用Python正则提取DataFrame列中4/5位数字左侧内容?

Pandas提取字符串中首个4/5位数字左侧内容的解决方案

问题场景

现有一个Pandas DataFrame列,包含的字符串格式如下:

column name
    0   129 4,029.16 08-31-13 8043 304.12 02-28-13 00T773466
    1   19 179.00 03-31-12 T0707440 7794 2,898.56 01-31-13 00T757276
    2   19716 3.36 01-31-15 00T729912 30593 6,041.74 12-31-16 00T770362
    3   19870 131.22 02-28-15 00T709284 4 30611 199.46 02-03-23 12-31-16 00T691818
    4   19984 12.25 02-28-15 00T879664 30647 199.45 12-31-16 00T691818
    5   20505 1,206.13 03-31-15 00T590582 30648 199.45 12-31-16 00T691818
    6   20623 84.11 04-30-15 00T621725 30759 3,325.27 12-31-16 00T580639

需要提取每个字符串中第一个4或5位数字左侧的所有内容到单独的before列,预期结果如下:

before
0   129 4,029.16 08-31-13
1   19 179.00 03-31-12 T0707440
2   19716 3.36 01-31-15 00T729912
3   19870 131.22 02-28-15 00T709284 4
4   19984 12.25 02-28-15 00T879664
5   20505 1,206.13 03-31-15 00T590582
6   20623 84.11 04-30-15 00T621725

目前已通过以下代码成功提取该数字右侧的内容:

df['after']=df['column_name'].str.extract('(\s\d{4,5}\s+.*)')

解决方案

方法1:使用str.extract配合正则捕获

利用正则的非贪婪匹配,捕获字符串开头到第一个4/5位数字前的所有内容:

df['before'] = df['column_name'].str.extract(r'^(.*?)\s\d{4,5}\s')
  • 正则说明:
    • ^:匹配字符串起始位置
    • (.*?):非贪婪模式捕获任意字符,直到遇到后续的匹配规则
    • \s\d{4,5}\s:匹配“空格+4/5位数字+空格”,定位到目标分割点

方法2:使用str.split分割取首段

通过str.split只分割一次,取分割后的第一部分内容:

df['before'] = df['column_name'].str.split(r'\s\d{4,5}\s', n=1).str[0]
  • 参数说明:
    • n=1:限制只分割一次,确保只匹配第一个4/5位数字的位置
    • .str[0]:取分割后的第一个元素,即目标左侧内容

两种方法都能准确得到预期的before列结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:24:58