Python处理CSV数据集时的浮点格式转换错误求助
解决CSV中逗号小数点转Python浮点数的报错问题
这问题我熟得很——你遇到的是典型的区域格式差异:欧洲很多国家用逗号作为小数点分隔符,而Python默认认点号,所以读进来的数值是字符串类型,后续转float自然就报ValueError: could not convert string to float: '21,5'了。
给你两个最实用的解决方案,优先选第一个:
方案1:读CSV时直接指定小数点符号
这是最高效的方式,不用后续额外处理。只需要在pd.read_csv()里加个decimal=','参数,pandas会自动把逗号识别成小数点,读出来直接就是float类型:
import pandas as pd import numpy as np # 关键修改:添加decimal参数,从源头解决格式问题 data = pd.read_csv('measurements.csv', decimal=',') data.shape # 后续代码正常执行即可 X = data.iloc[:, :-5].values y = data.iloc[:, -4] y = np.where(y == 'E10', 1, 0) # 你的enc相关代码可以继续往下写,不会再因为数值格式报错
方案2:已读入数据后批量替换转换
如果已经把数据读进来了(没加decimal参数),可以用字符串替换把逗号换成点,再转成float:
# 批量处理所有字符串类型的数值列 for col in data.columns: if data[col].dtype == object: # 判断是否为字符串格式的列 data[col] = data[col].str.replace(',', '.').astype(float) # 也可以单独处理某一列 # data['target_column'] = data['target_column'].str.replace(',', '.').astype(float)
优先选方案1,因为它从源头解决问题,避免后续可能的格式遗漏,执行效率也更高。
内容的提问来源于stack exchange,提问作者user8379153
相关产品推荐
相关产品推荐

