使用pandas转换特殊格式时间字符串时报KeyError如何解决?
问题原因
你调用pd.read_csv时指定了index_col=0,也就是将第一列timestamp设置为了DataFrame的索引,因此常规列列表中已经不存在timestamp这一列,直接按列名访问自然会抛出KeyError。
另外你当前写的时间转换格式也存在匹配不全的问题:原始时间格式包含秒、微秒段,仅写%Y-%m-%dD%H:%M会在后续解析时报格式不匹配错误。
解决方法
你可以根据自己的使用场景二选一:
方法1:保留timestamp为索引,直接转换索引格式
# 直接对索引做时间格式转换,补全匹配原始数据的格式规则 tick_data.index = pd.to_datetime(tick_data.index, format="%Y-%m-%dD%H:%M:%S.%f") # 如果后续需要把timestamp变回普通列,额外执行下面这行即可 # tick_data = tick_data.reset_index()
方法2:读取时不指定索引,后续单独处理时间列
修改pd.read_csv参数去掉index_col=0,读取完成后再处理时间列、按需设置索引:
# 读取时不指定索引,timestamp会作为普通列保留 tick_data = pd.read_csv('trade.csv', names=['timestamp', 'symbol', 'side', 'size', 'price', 'tickDirection', 'trdMatchID', 'grossValue', 'homeNotional', 'foreignNotional'], parse_dates=True, low_memory=False) # 转换时间列格式 tick_data['timestamp'] = pd.to_datetime(tick_data['timestamp'], format="%Y-%m-%dD%H:%M:%S.%f") # 如果需要将timestamp设为索引,转换完成后手动设置 tick_data = tick_data.set_index('timestamp')
内容的提问来源于stack exchange,提问作者Sergo Longid
相关产品推荐
相关产品推荐

