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

pandas读取CSV做Normalizer处理时Protocol_6无法转float报错如何解决

报错原因

  • 核心触发点来自你读取CSV时的header=None配置:如果你的preprocessed_train.csv文件第一行本身就是列名(包含Protocol_6字段),该参数会强制pandas把表头行识别为普通数据行存入DataFrame,导致第一行全是字符串类型的列名,后续做数值归一化、类型转换时无法将字符串Protocol_6转为float,触发第一层报错。
  • 第二层报错来自列名不匹配:设置header=None后,DataFrame的列名默认为从0开始的整数序列,不存在名为Protocol_6的列,你指定该列名做astype转换时会触发列不存在的异常,因此出现嵌套报错提示。

解决方法

情况1:CSV第一行是表头(绝大多数场景)

直接去掉header=None参数,让pandas自动识别表头作为列名即可:

# 读取时保留表头
traindata = pd.read_csv('preprocessed_train.csv', low_memory=False)
# 确认列名正确
print(traindata.columns.tolist())
# 后续操作保持不变即可
X = traindata.iloc[0:,1:71]
Y = traindata.iloc[0:,71]
scaler = Normalizer().fit(X)
trainX = scaler.transform(X)

情况2:CSV确实没有表头,Protocol_6是某列的实际数据值

用pd.to_numeric做安全类型转换,无法转为数值的内容会被设为空值,后续可自行选择删除或填充:

traindata = pd.read_csv('preprocessed_train.csv', header=None, low_memory=False)
# 替换n为Protocol_6所在的列索引
traindata.iloc[:, n] = pd.to_numeric(traindata.iloc[:, n], errors='coerce')
# 处理空值,示例为删除含空值的行,也可替换为fillna填充0、均值等
traindata = traindata.dropna(subset=[traindata.columns[n]])

内容的提问来源于stack exchange,提问作者Yasser.AbdelSattar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 03:15:01