Pandas to_datetime函数输出异常:日期转换后与原数据不符
Pandas日期转换不一致问题的解决办法
我懂你遇到的困扰了——用pd.to_datetime转换Date列后,部分行的转换结果和原始日期对不上,核心问题出在Pandas默认的日期解析逻辑和你的数据实际格式不匹配。
问题根源
你的Date列是DD-MM-YYYY格式(比如01-12-2017代表2017年12月1日),但pd.to_datetime自动推断格式时,会优先把XX-XX-XXXX这类格式当成MM-DD-YYYY处理,所以会把01-12-2017错误解析成2017年1月12日,这就导致了Date和TS列的不一致。
解决方案
1. 指定明确的解析格式
直接在pd.to_datetime里加上format参数,强制按你的日期格式解析,这是最稳妥的解决方式:
x1['TS'] = pd.to_datetime(x1['Date'], format='%d-%m-%Y')
这里%d代表日,%m代表月,%Y代表4位年份,完全匹配你的Date列格式。
2. 处理异常日期(可选)
如果数据里存在不符合DD-MM-YYYY格式的异常值,可以用errors='coerce'把无法解析的日期转为NaT(Pandas的空时间值),方便后续排查处理:
x1['TS'] = pd.to_datetime(x1['Date'], format='%d-%m-%Y', errors='coerce') # 找出转换失败的行 invalid_dates = x1[x1['TS'].isna()] print(invalid_dates)
3. 验证转换结果
转换完成后,可以用下面的代码快速检查是否还有不匹配的情况:
# 把转换后的时间转回和原始Date一致的字符串格式 x1['TS_str'] = x1['TS'].dt.strftime('%d-%m-%Y') # 筛选出不匹配的行 mismatch_rows = x1[x1['Date'] != x1['TS_str']] print(mismatch_rows)
如果输出为空,说明所有日期都转换正确了。
内容的提问来源于stack exchange,提问作者Paras Mani
相关产品推荐
相关产品推荐

