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

如何读取表头前含前置文本的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:27:01