使用Pandas读取分号分隔文件并归一化数据:解决删除目标变量quality时的KeyError问题
解决Pandas读取分号分隔CSV及数据归一化问题
先帮你拆解下当前遇到的核心问题,再一步步给出正确的操作流程:
一、KeyError错误的直接原因
你触发KeyError: ['quality'] not found in axis主要有两个问题:
- 分隔符使用错误:你用了
delimiter="\s"(空白符分隔),但实际是分号分隔的CSV,导致读取后列名混乱,甚至没有quality这个列; - drop的axis参数错误:
axis=0是按行删除,你要删除的是quality列,应该用axis=1(或axis='columns')。
二、正确读取分号分隔的CSV文件
用Pandas读取分号分隔的文件,直接指定sep=";"或delimiter=";"即可,示例代码:
import pandas as pd # 正确读取分号分隔的CSV df = pd.read_csv('gdrive/My Drive/whitewine.csv', sep=";") # 可选:确认列是否正确读取,用于排查问题 print(df.columns)
执行完print(df.columns)后,你应该能看到包含quality的列名列表,说明文件读取无误。
三、正确分离特征与目标变量
现在可以安全地删除quality列作为特征集,同时提取目标变量:
# 分离特征(X)和目标变量(y) X = df.drop(['quality'], axis=1).values # axis=1表示删除列 y = df['quality'].values
四、数据归一化操作
常用的归一化方法有两种,可根据数据特点选择:
方法1:Min-Max归一化(缩放到[0,1]区间)
适合数据分布相对均匀、没有明显异常值的场景:
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_normalized = scaler.fit_transform(X)
方法2:标准化(Z-score归一化)
适合数据存在异常值、需要消除量纲影响的场景:
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_standardized = scaler.fit_transform(X)
完整示例代码
把所有步骤整合起来:
import pandas as pd from sklearn.preprocessing import MinMaxScaler # 1. 读取分号分隔的CSV df = pd.read_csv('gdrive/My Drive/whitewine.csv', sep=";") # 2. 分离特征与目标变量 X = df.drop(['quality'], axis=1).values y = df['quality'].values # 3. 执行Min-Max归一化 scaler = MinMaxScaler() X_normalized = scaler.fit_transform(X) # 可选:查看归一化后的前5行数据 print(X_normalized[:5])
内容的提问来源于stack exchange,提问作者Caroline
相关产品推荐
相关产品推荐

