Pandas DataFrame日期列排序结果不符合预期问题咨询
问题核心原因
日期列转换为datetime类型时,Pandas自动推断格式错误,把原始日期字符串中的月和日颠倒识别,导致datetime存储的实际值和你预期的日期不符,最终排序结果异常。
你代码里直接调用pd.to_datetime(df.Date)没有指定格式,Pandas默认会优先按月/日/年的逻辑推断日期,如果你的CSV原始日期是日/月/年的书写格式,就会出现解析错误:比如原始字符串12/01/2020会被识别为2020年1月12日,而你实际要的是2020年12月1日,自然排序顺序就不对。
解决方法
1. 明确指定日期解析格式(最稳妥,不会出错)
先确认CSV里原始日期的字符串格式,比如是日/月/年的格式,就给pd.to_datetime传入format参数明确指定解析规则:
import pandas as pd df = pd.read_csv(outputcsv) # 这里的%d代表日,%m代表月,%Y代表4位年份,根据你实际的原始格式调整即可 df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
2. 快速优先识别日(适合不想核对格式的场景)
如果只是要优先把日期开头的数字识别为日,可以直接加dayfirst=True参数:
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
3. 校验后再排序
转换完成后先校验几个日、月都小于12的日期,确认解析正确后再执行排序,还可以加ignore_index=True重置行索引,方便后续操作:
# 校验转换结果:输出原始日期、转换后年/月/日格式的对比 print(pd.concat([ df['Date'].rename('原始转换结果'), df['Date'].dt.strftime('%Y-%m-%d').rename('标准格式展示') ], axis=1).head(10)) # 确认无误后排序 df.sort_values(by='Date', inplace=True, ignore_index=True)
内容的提问来源于stack exchange,提问作者Joydeep
相关产品推荐
相关产品推荐

