Pandas DataFrame日期重格式化 如何在第二个括号后加20修正格式
Pandas日期字符串格式统一实现方法
直接用下面的代码就能实现需求,不需要逐行手写循环,两种方案按需选择即可。
方案1:正则快速替换(推荐,代码最短)
用Pandas内置的向量化字符串正则替换能力,直接定位第二个括号的位置插入'20',运算速度快,适合数据量大的场景。
你可以替换成自己实际的列名直接运行:
import pandas as pd # 以下为模拟测试数据,实际使用时替换为你自己的DataFrame即可 df = pd.DataFrame({ 'date_col': [ 'Wed 02-Apr-24 (1st) (24)', 'Fri 13-May-05 (2nd) (05)', 'Sun 27-Aug-99 (3rd) (99)' ] }) # 严格匹配「第二个右括号后插入'20'」的需求 df['fixed_date'] = df['date_col'].str.replace( r'^([^)]*\))([^)]*\))', r'\1\220', regex=True )
如果你的实际需求是把第二个括号内的两位年份补全为20开头的四位年份(也就是第二个左括号后插入'20',比如(24)变成(2024),是日期格式统一最常见的场景),把替换规则改成下面这行就行:
df['fixed_date'] = df['date_col'].str.replace( r'^([^(]*\([^)]*\))\(', r'\1(20', regex=True )
方案2:位置索引插入(逻辑最直观,不会误匹配)
如果你的日期字符串包含特殊字符、正则容易匹配错误,就用这个按括号位置查找插入的方法,完全按照「定位第二个括号,在指定位置插入'20'」的逻辑执行,适配性更强:
def insert_20(s: str, target_bracket: str = ')', insert_pos: str = 'after') -> str: """ 查找指定括号的位置,插入'20' :param target_bracket: 要定位的括号,')'为右括号,'('为左括号 :param insert_pos: 插入位置,'after'为括号后,'before'为括号前 """ # 定位第一个括号位置 first_pos = s.find(target_bracket) # 定位第二个括号位置 second_pos = s.find(target_bracket, first_pos + 1) insert_idx = second_pos + 1 if insert_pos == 'after' else second_pos return s[:insert_idx] + '20' + s[insert_idx:] # 应用:第二个右括号后插入'20' df['fixed_date'] = df['date_col'].apply(insert_20) # 如果要在第二个左括号后插入(补全四位年份场景),改参数即可 # df['fixed_date'] = df['date_col'].apply(insert_20, target_bracket='(', insert_pos='after')
原始数据参考

处理完直接打印df.head()就能核对结果,不符合预期的话单独调整括号匹配参数即可。
内容的提问来源于stack exchange,提问作者Paul Corcoran
相关产品推荐
相关产品推荐

