用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
相关产品推荐
相关产品推荐

