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

使用Pandas读取CSV时如何正确格式化DatetimeIndex

解决小时级时间序列日期解析与频率识别问题

问题根源

你的问题出在pandas自动解析日期时的歧义——当日期中的日和月都≤12时,pandas无法明确区分day.month.year和month.day.year,导致解析混乱;另外自动解析不会强制指定时间序列频率,需要手动干预。

分步解决方案

  1. 明确指定日期格式解析,避免自动歧义
    不要依赖pandas的自动日期解析,改用pd.to_datetime手动指定格式,确保解析完全匹配你的CSV格式:

    # 先读取CSV,暂不解析日期、不设为索引
    df = pd.read_csv('path/analysis.csv', sep=';')
    # 按CSV实际格式解析time_stamp列
    df['time_stamp'] = pd.to_datetime(df['time_stamp'], format='%d.%m.%Y %H:%M')
    # 将解析后的列设为DatetimeIndex
    df = df.set_index('time_stamp')
    

    这里的%d.%m.%Y %H:%M完全对应你CSV里的day.month.year hour:minute格式,解析后索引的内部存储和显示格式都会统一,不会出现格式切换问题。

  2. 强制识别小时级频率
    解析完成后,需要明确设置时间序列频率。首先确认数据完整性(2018年是平年,全年小时级数据应为8760条),然后用asfreq方法强制设置频率:

    # 检查记录数是否符合全年小时数
    print(len(df))  # 正常应输出8760
    # 强制设置小时频率
    df = df.asfreq('H')
    

    如果存在缺失的时间点,asfreq会自动填充NaN(可根据需求用fillna处理缺失值)。设置后,通过df.index.freq可查看是否成功识别为<Hour>。

验证结果

执行上述步骤后,可通过以下方式验证效果:

  • 索引类型:type(df.index) 仍为pandas.core.indexes.datetimes.DatetimeIndex
  • 索引格式:print(df.index[:5]) 会显示统一的ISO标准格式(如2018-01-01 00:00:00)
  • 频率识别:print(df.index.freq) 输出<Hour>,说明小时频率已正确识别

内容的提问来源于stack exchange,提问作者M.B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:22:25