使用Pandas加载Excel文件时无法正确转换日期格式的求助
问题:pandas read_excel解析日期时格式混乱
我使用pandas的read_excel方法加载Excel文件,设置parse_dates=True参数后,日期格式无法正确转换。本地Excel中的日期格式准确,但加载到Python后,一半数据的dmY格式被错误识别为mdY。我需要的输出格式为YYYY-mm-dd HH:MM:SS。
示例数据
df = pd.DataFrame({'ID':[2914240.0,2914137.0,2929456.0,2920801.0], 'RT_Date':['2021-01-02 06:38:00','2021-01-02 02:58:00','02-19-2021 17:59:00','2021-09-02 12:49:00'], 'DateCreated':['01-31-2021 14:38:12','01-31-2021 10:57:50','02-19-2021 01:58:38','2021-09-02 11:35:51']})
尝试过的代码
df = pd.read_excel('demo.xlsx', parse_dates=True)
问题原因与解决方法
问题原因
parse_dates=True会让pandas自动推断日期格式,但当数据中混杂多种日期格式(比如部分是YYYY-MM-DD、部分是MM-DD-YYYY)时,自动推断逻辑会出错——尤其是当日期的日≤12时,pandas会优先按MM-DD-YYYY解析,导致dmY格式被误判。
解决方法
不要依赖自动推断,手动指定解析规则:
方法1:用dateutil处理多格式解析
先安装依赖库:
pip install python-dateutil
然后自定义解析函数:
from dateutil.parser import parse # 指定需要解析的日期列,用parse函数处理多种格式 df = pd.read_excel('demo.xlsx', parse_dates=['RT_Date', 'DateCreated'], date_parser=parse) # 可选:转换为目标字符串格式(若需保持datetime类型用于时间运算,可跳过此步) df['RT_Date'] = df['RT_Date'].dt.strftime('%Y-%m-%d %H:%M:%S') df['DateCreated'] = df['DateCreated'].dt.strftime('%Y-%m-%d %H:%M:%S')
方法2:指定所有可能的日期格式(pandas 1.3.0+支持)
如果明确知道数据中的日期格式类型,直接指定多种格式:
df = pd.read_excel('demo.xlsx') # 对每个日期列转换,列出所有可能的格式 df['RT_Date'] = pd.to_datetime(df['RT_Date'], format=['%Y-%m-%d %H:%M:%S', '%m-%d-%Y %H:%M:%S']) df['DateCreated'] = pd.to_datetime(df['DateCreated'], format=['%Y-%m-%d %H:%M:%S', '%m-%d-%Y %H:%M:%S']) # 可选:转换为目标字符串格式 df['RT_Date'] = df['RT_Date'].dt.strftime('%Y-%m-%d %H:%M:%S') df['DateCreated'] = df['DateCreated'].dt.strftime('%Y-%m-%d %H:%M:%S')
注意事项
- 检查Excel中的日期类型:如果是Excel自带的日期格式(本质是数值),pandas通常能正确解析;如果是手动输入的文本格式,才会出现格式混杂问题。
- 若后续需要进行时间运算,建议保留datetime类型,无需转换为字符串;仅当需要固定格式的字符串输出时,再用
strftime转换。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

