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

Python Pandas:将含两位年份的多格式字符串列转为四位年份

GRA/B
TPP
BBMY
...
SOCBBA 0 MAX
CMBD 0 MAX
EPR 5.75 MAX
...
PMUST 5.57643 02/15/34
LEO 0 12/30/2099
RGB 3.125 09/15/14
RGB 3.375 04/15/20

我希望将所有日期转换为显示完整年份的格式,实现如下效果:

col |

GRA/B
TPP
BBMY
...
SOCBBA 0 MAX
CMBD 0 MAX
EPR 5.75 MAX
...
PMUST 5.57643 02/15/2034
LEO 0 12/30/2099
RGB 3.125 09/15/2014
RGB 3.375 04/15/2020

目前我能想到的方法是逐个执行如下代码:
```python
df['col'] = df['col'].str.replace('/14', '/2014')

但年份众多,且该方法会错误替换日或月。请问如何正确实现该需求,是否应该使用正则表达式?


解决方案

完全可以用正则表达式解决这个问题,核心是精准定位字符串末尾的两位数年份,避免误匹配月份或日期里的数字。

1. 精准匹配的正则规则

我们需要匹配的是字符串末尾、斜杠后的两位数字(也就是年份),正则表达式写为:

/(\d{2})$
  • \/:匹配日期中的斜杠(正则里需要转义)
  • (\d{2}):捕获两位数字的年份,方便后续替换
  • $:锚定到字符串末尾,确保这是最后一段内容,不会误匹配比如12/14/20里的/14

2. 用pandas批量替换

结合pandas的str.replace和自定义替换逻辑,给捕获到的两位年份前加上20:

import pandas as pd

# 构造示例DataFrame
data = {
    'col': [
        'GRA/B', 'TPP', 'BBMY',
        'SOCBBA 0 MAX', 'CMBD 0 MAX', 'EPR 5.75 MAX',
        'PMUST 5.57643 02/15/34', 'LEO 0 12/30/2099',
        'RGB 3.125 09/15/14', 'RGB 3.375 04/15/20'
    ]
}
df = pd.DataFrame(data)

# 定义替换函数:给两位年份补全20前缀
def add_full_year(match):
    return f'/20{match.group(1)}'

# 执行替换
df['col'] = df['col'].str.replace(r'/(\d{2})$', add_full_year, regex=True)

3. 结果验证

执行后,所有符合规则的两位数年份都会被转为四位:

  • 02/15/34 → 02/15/2034
  • 09/15/14 → 09/15/2014
  • 已经是四位年份的12/30/2099保持不变
  • 不含日期的字符串(如GRA/B、SOCBBA 0 MAX)完全不受影响

进阶:更严格的日期匹配

如果你的数据里存在字符串末尾/xx不是年份的情况,可以进一步缩小匹配范围,只针对MM/DD/YY格式的日期:

(\d{2}/\d{2})/(\d{2})$

对应的替换函数调整为:

def add_full_year(match):
    return f'{match.group(1)}/20{match.group(2)}'

这样只会匹配标准的月/日/两位年格式,避免误替换其他无关内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:05:26