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

读取汽车销售数据转numpy数组遇KeyError:2问题求助

解决读取汽车销售数据转NumPy数组的报错问题

嘿,我看你在把汽车销售数据转成NumPy数组的时候碰到了麻烦,咱们来一步步拆解问题、搞定它~

问题根源

你这段代码的核心问题出在索引方式用错了:

data = pd.read_csv('Book2.csv')[i].values

Pandas里DataFrame[]的默认行为是按列名索引,但你的循环变量i是2到33的数字。除非你的CSV文件列名正好是这些数字,否则Pandas找不到对应列,就会抛出你看到的get_loc相关KeyError。

另外还有个小细节:你在循环里每次都重新读取整个CSV,这会浪费大量IO时间,效率很低,应该先一次性把数据读入内存再处理。

修正方案

方案1:按列的位置索引(推荐)

如果你是想按列的位置取第2到第33列(注意:Pandas的位置索引从0开始,第2列对应索引1,第33列对应索引32),可以用iloc方法实现:

import numpy as np
import pandas as pd

# 一次性读取整个CSV,避免重复IO操作
df = pd.read_csv('Book2.csv')

# 循环处理第2列到第33列(对应位置索引1到32)
for col_idx in range(1, 33):
    # iloc[:, col_idx] 取所有行的第col_idx列,再转成NumPy数组
    col_data = df.iloc[:, col_idx].values
    print(f"第{col_idx+1}列的形状:{col_data.shape}")
    print(col_data)

方案2:按列名索引(如果列名确实是数字)

如果你的CSV列名本身就是数字2到33,可以先确认列名类型,再调整索引逻辑:

import numpy as np
import pandas as pd

df = pd.read_csv('Book2.csv')
# 先打印列名,确认类型和数值
print("所有列名:", df.columns)

for col_name in range(2, 34):
    # 若列名是字符串类型的数字,需把col_name转成字符串
    col_name_str = str(col_name)
    if col_name_str in df.columns:
        col_data = df[col_name_str].values
        print(f"列名{col_name_str}的形状:{col_data.shape}")
        print(col_data)
    else:
        print(f"警告:列名{col_name_str}不存在于数据中")

额外提示

  • 处理数据前,先调用df.head()或df.info()查看数据结构,确认列名、数据类型等信息,能帮你快速定位问题
  • 尽量避免在循环中重复读取文件,一次读取多次处理是更高效的做法

内容的提问来源于stack exchange,提问作者strider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:35:24