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

为什么Pandas导出CSV时datetime列的日/月显示位置会随机切换?

问题根因

该异常的核心原因是你调用pd.read_csv解析日期时没有显式指定原始日期格式,pandas的自动日期推断逻辑对dd.mm.yyyy格式的日期存在识别歧义:

  • 当日期的日字段数值大于12时,pandas只能将其识别为日部分,解析为日.月.年格式,结果正确
  • 当日期的日字段数值小于等于12时,pandas会随机将部分日期误判为月.日.年格式,导致日期的日月属性本身就解析错误,后续strftime输出时自然会出现日月位置颠倒的情况,看起来就像格式中途切换。
    另外如果你在拆分前做了排序操作,若排序对象是字符串格式的日期而非datetime类型的日期,也会因为字符串按字符顺序排列的特性,出现1月2号排在1月31号之后的错乱,进一步加剧看起来格式切换的错觉。

修复方案

修改读取文件的代码,显式指定日期解析规则,避免自动推断出错,同时优化后续逻辑避免警告和多余输出:

# 自定义日期解析函数,适配原始数据的%d.%m.%Y + %H:%M格式
date_parser = lambda x: pd.to_datetime(x, format='%d.%m.%Y %H:%M')

file = pd.read_csv('datta.csv', 
                    sep = ';', 
                    skiprows = 56,
                    parse_dates = [['Date','Time']],
                    date_parser=date_parser) # 传入自定义解析规则

# 读入后Date_Time已经是datetime类型,无需重复转换
years_pre = file['Date_Time'].dt.year

# 按年份拆分导出
for year_XX in range(years_pre.min(), years_pre.max()+1):
    print(f"Creating file (15 min) for the year: {year_XX}")
    df_subset_15 = file[years_pre == year_XX].copy() # 加copy避免链式赋值警告
    df_subset_15['Date_Time'] = df_subset_15['Date_Time'].dt.strftime('%d/%m/%Y %H:%M')
    # 加index=False去掉输出CSV里第一列的多余行号
    df_subset_15.to_csv(f"data_(15 min)_year_{year_XX}.csv", index=False)

内容的提问来源于stack exchange,提问作者Sultry T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:24:03