如何读取表头前含前置文本的CSV文件并解决KeyError报错
问题原因
你使用的目标CSV文件开头存在2行前置版权说明文本,直接调用pd.read_csv()时,默认会把第一行说明文本识别为表头,导致实际交易数据的表头和数据整体错位,因此找不到close列触发KeyError报错。
解决方案
方法1:指定跳过前导行(最快捷)
该数据集固定前2行是说明文本,直接在读取时添加skiprows=2参数即可正确识别表头:
import pandas as pd # 跳过前2行说明文本,直接读取正式表头和交易数据 BTC = pd.read_csv('C:/Users/Downloads/btceur1h.csv', skiprows=2) # 此时可正常提取close列 print(BTC['close'])
方法2:先排查表头错位情况
如果你不确定需要跳过的行数,可以先打印当前读取结果的列名,确认表头错位问题:
data = pd.read_csv('C:/Users/Downloads/btceur1h.csv') # 打印列名确认是否为说明文本而非正式表头 print(data.columns)
如果输出的列名是说明类文字,调整skiprows的参数值到正式表头所在的行号即可。
方法3:动态识别表头(适合前导说明行数不固定的场景)
如果不确定前导说明的行数,可以主动扫描文件找到包含close的行作为表头再加载数据:
import csv import pandas as pd file_path = 'C:/Users/Downloads/btceur1h.csv' # 读取文件所有行 with open(file_path, 'r', encoding='utf-8') as f: lines = list(csv.reader(f)) # 查找包含'close'的表头行位置 header_idx = None for i, row in enumerate(lines): if 'close' in [col.strip().lower() for col in row]: header_idx = i break if header_idx is not None: # 用找到的行作为表头,后续行作为数据加载 BTC = pd.DataFrame(lines[header_idx+1:], columns=lines[header_idx]) # 转换close列为数值格式避免后续运算报错 BTC['close'] = pd.to_numeric(BTC['close']) print(BTC['close'])
内容的提问来源于stack exchange,提问作者boordio
相关产品推荐
相关产品推荐

