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/203409/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
相关产品推荐
相关产品推荐

