如何在Pandas中正确解析含拆分日期时间的TXT时序文件并生成DatetimeIndex
在Pandas中高效合并拆分的日期时间列并转为DatetimeIndex
针对你这种日期和时间拆分在两列的时序数据,最高效的处理方式是在读取文件阶段就完成日期合并与解析,避免后续额外的内存操作。以下是具体实现方案:
方法一:读取时直接解析并设置索引(推荐)
利用pd.read_csv的parse_dates参数指定合并目标列,同时通过date_format明确日期格式(这是提升效率的关键,避免Pandas自动推断格式的额外开销),直接将合并后的时间列设为索引:
import pandas as pd df = pd.read_csv( '你的数据文件.txt', parse_dates=[[0, 1]], # 合并第0列(日期)和第1列(时间) date_format='%Y%m%d,%H:%M:%S', # 匹配"20220401,00:00:00"格式 index_col=0 # 将合并后的datetime列设为DatetimeIndex ) # 可选:给索引重命名 df.index.name = 'Datetime'
补充:修复错误表头
注意到你提供的示例表头存在列名不匹配问题(数据行有7个字段,但表头仅6个),如果需要修正表头,可在读取时指定正确列名:
df = pd.read_csv( '你的数据文件.txt', names=['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume'], skiprows=1, # 跳过原错误表头 parse_dates=[['Date', 'Time']], date_format='%Y%m%d,%H:%M:%S', index_col=0 )
方法二:已读取数据后的处理
如果已经完成文件读取,再通过字符串拼接+pd.to_datetime合并列,同样记得指定格式以保证效率:
import pandas as pd # 先读取原始数据(不解析日期) df = pd.read_csv('你的数据文件.txt') # 合并日期列和时间列为datetime类型 df['Datetime'] = pd.to_datetime(df['TimeStamp'] + ',' + df['open'], format='%Y%m%d,%H:%M:%S') # 设置为索引并删除原日期时间列 df = df.set_index('Datetime').drop(['TimeStamp', 'open'], axis=1)
关键优化点
无论哪种方法,务必指定format参数。手动指定格式能让Pandas直接按规则解析,比自动推断快数倍,尤其是处理百万级以上的时序数据时,效率提升非常明显。
内容的提问来源于stack exchange,提问作者Kamran
相关产品推荐
相关产品推荐

