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

pd.to_datetime转换日期格式出错,如何正确转换日/月/年格式时间?

问题描述

有如下DataFrame:

import pandas as pd
df = pd.DataFrame({"DateTime":["26/06/2014 22:05:16",
                               "25/06/2014 22:05:56",
                               "01/07/2014 22:05:30",
                               "01/08/2014 19:04:23"],
                   "Data":[20, 31, 25, 44]})

输出结果:

DateTime  Data
0  26/06/2014 22:05:16    20
1  25/06/2014 22:05:56    31
2  01/07/2014 22:05:30    25
3  01/08/2014 19:04:23    44

需要将DateTime列转换为datetime64类型,原始数据是日/月/年格式,最终要输出年-月-日格式的字符串。尝试了以下代码:

df["DateTime"] = pd.to_datetime(df["DateTime"])
df["DateTime"] = df["DateTime"].dt.strftime('%Y-%m-%d %H:%M:%S')

得到错误结果:

DateTime  Data
0  2014-06-26 22:05:16    20
1  2014-06-25 22:05:56    31
2  2014-01-07 22:05:30    25
3  2014-01-08 19:04:23    44

前两个日期转换正常,但后两个日期的月份和日期颠倒了,正确结果应为:

2  2014-07-01 22:05:30    25
3  2014-08-01 19:04:23    44 
解决方法

错误原因是直接使用pd.to_datetime()时,它会默认自动识别日期格式,当遇到01/07/2014这种同时符合两种格式的字符串时,会优先按月/日/年解析,导致日期月份颠倒。

正确的做法是在pd.to_datetime()中明确指定原始日期的格式,确保解析准确:

# 第一步:按原始格式(日/月/年 时分秒)解析为datetime64类型
df["DateTime"] = pd.to_datetime(df["DateTime"], format='%d/%m/%Y %H:%M:%S')
# 第二步:转换为目标格式的字符串
df["DateTime"] = df["DateTime"].dt.strftime('%Y-%m-%d %H:%M:%S')

执行后得到正确结果:

DateTime  Data
0  2014-06-26 22:05:16    20
1  2014-06-25 22:05:56    31
2  2014-07-01 22:05:30    25
3  2014-08-01 19:04:23    44

补充说明

如果不需要将日期转为字符串,只是想让DataFrame显示为年-月-日格式,同时保留datetime64类型(方便后续时间相关操作),可以跳过strftime步骤,直接设置pandas的显示格式:

df["DateTime"] = pd.to_datetime(df["DateTime"], format='%d/%m/%Y %H:%M:%S')
pd.options.display.date_format = '%Y-%m-%d %H:%M:%S'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:06:17