读取汽车销售数据转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
相关产品推荐
相关产品推荐

