pd.to_datetime未识别年份,取最大日期结果异常求助
Pandas日期解析错误导致max()返回旧日期的问题
问题描述
我搜索了2小时未找到可行解决方案:处理数据集时尝试获取最新日期,但代码未正确识别年份。数据集包含日期:01/09/2023、12/21/2022、12/09/2022、11/19/2022,执行以下代码后,st.write输出的最大日期为12/21/2022,而非预期的01/09/2023,说明年份未被正确识别。尝试过df['Date'] = df['Date'].dt.strftime('%Y%m%d').astype(int),但无效果。
代码片段:
import pandas as pd df=pd.read_csv('test.csv') df['Date'] = pd.to_datetime(df['Date']) st.write(df['Date'].max())
解决方案
问题根源是pd.to_datetime自动解析日期时,因DD/MM/YYYY与MM/DD/YYYY格式歧义,导致年份识别错误。可通过以下方式解决:
1. 明确指定日期格式
直接通过format参数告知pandas日期的具体格式,避免自动猜测出错:
- 若日期为日/月/年(DD/MM/YYYY):
import pandas as pd import streamlit as st df = pd.read_csv('test.csv') # 明确指定格式为日/月/年 df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y') # 可选:打印解析结果验证正确性 print(df['Date']) st.write(df['Date'].max())
- 若日期为月/日/年(MM/DD/YYYY):
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')
2. 使用dayfirst=True参数
如果日期格式是日在前、月在后,可通过该参数让pandas优先解析第一部分为日期:
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
关键说明
你之前尝试的strftime转换是在日期解析错误的基础上操作的,因此无法解决问题。必须先确保pandas正确解析出datetime类型的日期,再进行后续操作。
内容的提问来源于stack exchange,提问作者Markus Fürst
相关产品推荐
相关产品推荐

