如何统一Pandas DataFrame中多格式混杂的日期列数据
混杂日期格式统一化解决方案
原代码问题说明
- 遍历修改临时变量未生效:你在for循环中修改的是每次迭代生成的临时字符串变量
date,并没有将修改后的值写回DataFrame的对应位置,因此整列的横杠根本没有被替换。 - 日期格式参数匹配错误:你指定的
format='%d %b%Y'存在两个问题:一是%Y对应4位年份,无法匹配21这类两位年份(两位年需要用%y);二是未被替换的带横杠日期也无法匹配该格式,搭配errors='ignore'参数后,所有匹配失败的日期都会原样保留,最终输出自然还是混杂格式。
最优处理方案
直接用pandas内置的矢量化操作和智能日期解析能力处理,不需要写循环,代码简洁且效率更高:
- 批量替换所有横杠为空格(用pandas字符串矢量化方法,替代低效的for循环)
- 调用
pd.to_datetime自动解析多种日期格式,无需手动指定格式,工具会自动适配两位/四位年份、空格/横杠分隔的英文月日期格式 - (可选)转成你需要的统一字符串日期格式
完整可运行代码
import pandas as pd # 1. 批量替换横杠为空格 DF_all["SALES_DATE"] = DF_all["SALES_DATE"].str.replace('-', ' ') # 2. 自动解析为datetime类型,自动适配两种格式 DF_all["SALES_DATE"] = pd.to_datetime(DF_all["SALES_DATE"], infer_datetime_format=True) # 3. 可选:统一输出为「年-月-日」格式的字符串,比如2021-08-18 # DF_all["SALES_DATE"] = DF_all["SALES_DATE"].dt.strftime('%Y-%m-%d') # 验证结果 print(DF_all["SALES_DATE"].unique())
补充说明
如果你的日期中存在低于2000年的两位年份,只需要在转完datetime之后手动调整年份范围即可,当前你给出的示例都是2021年的日期,pandas默认的两位年解析规则(00-69归为20xx,70-99归为19xx)完全可以满足需求。
内容的提问来源于stack exchange,提问作者rimaalfreihat
相关产品推荐
相关产品推荐

