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

用Pandas read_csv将含分离日期时间列的CSV导入为多级索引DataFrame

把CSV时间序列数据导入为多级索引DataFrame的方案

嘿,你的思路完全没问题!用pandas.read_csv()配合index_col=['Date', 'Time']确实能直接生成带多级索引的DataFrame,不过我可以给你补充几个细节,确保日期和时间的解析完全匹配你指定的格式,避免自动识别踩坑:

核心代码优化与解析

你给出的代码已经覆盖了核心需求,我帮你拆解关键参数,再补全格式指定的部分:

import pandas as pd

_file_data = pd.read_csv(
    _file,
    sep=",",
    header=0,
    index_col=['Date', 'Time'],
    thousands="'",  # 专门处理带单引号的千位分隔符,比如像'1,234'这种格式的数据
    date_parser=lambda x: pd.to_datetime(x, format='%Y:%m:%d'),  # 明确指定Date列的解析格式,防止自动识别出错
    skipinitialspace=True
)

# 可选:把Time列转换成标准时间类型(如果需要的话)
_file_data.index = _file_data.index.set_levels(
    [_file_data.index.levels[0], pd.to_datetime(_file_data.index.levels[1], format='%H:%M:%S').time],
    level=['Date', 'Time']
)

两种索引方案的选择

  • 保留多级索引:上面的代码就是保留Date和Time两级索引的写法,通过date_parser明确指定日期格式,避免pandas自动解析时出现偏差。如果你的Time列只需要作为字符串保留,那可以去掉后面的索引层级转换部分。
  • 合并为单一Datetime索引:如果更习惯用单个完整的datetime索引(而不是多级),可以这样写:
    _file_data = pd.read_csv(
        _file,
        sep=",",
        header=0,
        thousands="'",
        parse_dates={'Datetime': ['Date', 'Time']},  # 把Date和Time合并成一个Datetime列
        date_parser=lambda x: pd.to_datetime(x, format='%Y:%m:%d %H:%M:%S'),  # 指定合并后的时间格式
        skipinitialspace=True
    ).set_index('Datetime')
    

验证导入结果

导入完成后,你可以用这条命令检查索引是否符合预期:

print(_file_data.index)

如果是多级索引,输出会类似MultiIndex([('2016-01-04', '09:00:00'), ...], names=['Date', 'Time']),确认格式正确就大功告成啦!

内容的提问来源于stack exchange,提问作者Krasnars

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:42:55