Pandas读取无表头CSV指定列报错:usecols与列不匹配
解决读取无表头CSV时usecols匹配失败的问题
问题说明
你用这段代码读取无表头CSV:
usecols = [*range(1, 5), *range(7, 9), *range(11, 13)] df = pd.read_csv('/content/drive/MyDrive/weather.csv', header=None, usecols=usecols, names=['d', 'm', 'y', 'time', 'temp1', 'outtemp', 'temp2', 'air_pressure', 'humidity'])
触发报错:
ValueError: Usecols do not match columns, columns expected but not found: [1, 2, 3, 4, 7, 8, 11, 12]
问题原因
- 指定的列索引超出数据集实际范围:从你提供的数据集内容来看,实际列数远小于
usecols中指定的索引(比如11、12,还有range(7,9)里的8,这些索引对应的列根本不存在)。 - 列名列表长度不匹配:
names里有9个名称,但usecols筛选后预期的列数是8个,两者长度不一致也会引发问题。
解决方法
步骤1:确认数据集实际列数
先运行这段代码查看CSV的实际列数和内容:
import pandas as pd df_temp = pd.read_csv('/content/drive/MyDrive/weather.csv', header=None) print("实际列数:", df_temp.shape[1]) print("前几行数据预览:") print(df_temp.head())
步骤2:修正usecols和names
根据实际列数调整参数,结合你提供的数据集内容,实际有8列(索引0到7),若需要提取索引1-7的列,对应你需要的字段,修正后的代码如下:
# 只保留实际存在的列索引 usecols = [1,2,3,4,5,6,7] # 名称列表长度和usecols列数一致 df = pd.read_csv('/content/drive/MyDrive/weather.csv', header=None, usecols=usecols, names=['d', 'm', 'y', 'time', 'temp1', 'outtemp', 'humidity'])
如果你的数据集里确实有temp2列,说明内容未展示全部列,此时你需要根据实际列索引调整usecols,确保每个索引都在0到(实际列数-1)的范围内。
内容的提问来源于stack exchange,提问作者akanesora
相关产品推荐
相关产品推荐

