使用LabelEncoder处理数据集遇TypeError及CSV读取异常求助
解决CSV读取报错与LabelEncoder TypeError问题
我来帮你搞定这两个遇到的问题:
一、CSV读取列数不匹配报错(Error tokenizing data)
你遇到的Expected 14 fields in line <...>, saw 15错误,是因为数据里某一行的字段数量和表头(14列)不一致,大概率是数据里的逗号被当成了分隔符(比如某单元格内容带逗号但没加引号)。可以试试这些办法:
- 跳过错误行:用pandas读取时,加上参数跳过格式错误的行:
# 新版pandas(1.4.0+)用这个 pd.read_csv('your_data.csv', skiprows=10, on_bad_lines='skip') # 旧版pandas用这个 pd.read_csv('your_data.csv', skiprows=10, error_bad_lines=False) - 指定正确的引号处理规则:如果是带引号的单元格导致的问题,加上
quoting参数:import csv pd.read_csv('your_data.csv', skiprows=10, quoting=csv.QUOTE_ALL) - 确认分隔符:有时候数据可能用制表符或其他符号分隔,检查后指定
sep参数,比如sep='\t'。
二、LabelEncoder的TypeError问题
data.apply(LabelEncoder().fit_transform)报错是因为LabelEncoder只能处理单列的一维数据,而apply如果直接作用于整个DataFrame,会把每一行/列当成数组传入,导致类型不匹配,而且LabelEncoder输出的是整数,不是浮点数。正确的做法是单独处理字符串列:
- 先筛选出数据里的字符串类型列,避免对数值列做无效转换
- 对每个字符串列单独应用LabelEncoder,按需转成浮点数
示例代码:
from sklearn.preprocessing import LabelEncoder import pandas as pd # 读取处理好的数据集(先解决上面的CSV读取问题) data = pd.read_csv('your_data.csv', skiprows=10, on_bad_lines='skip') # 筛选出所有字符串类型的列 string_columns = data.select_dtypes(include=['object']).columns # 遍历处理每个字符串列 label_encoder = LabelEncoder() for col in string_columns: # 先转换为整数,再转为浮点数(如果需要的话) data[col] = label_encoder.fit_transform(data[col]).astype(float)
另外提醒下:如果是处理特征列,LabelEncoder更适合有序分类变量;如果是无序分类变量,推荐用OneHotEncoder,避免模型错误地认为编码后的数值有大小关系。
内容的提问来源于stack exchange,提问作者There
相关产品推荐
相关产品推荐

