使用Python csv.reader时报无法将字符串转Float错误如何解决
报错原因
你使用quoting=csv.QUOTE_NONNUMERIC参数时,csv.reader会强制将所有未被引号包裹的字段转换为float类型,而你的CSV文件中存在App这类未加引号的字符串字段,转换失败触发ValueError。
你修改参数后仍报错的常见原因是未重新打开文件对象,前次读取操作已经将文件指针移动到了文件末尾,修改参数后的读取逻辑没有生效。
解决方案
- 方案1:默认读取+手动类型转换(最稳妥,适配混合类型无引号的CSV)
默认不添加特殊quoting参数,csv.reader会把所有字段读取为字符串格式,你需要使用对应字段时单独做类型转换即可,参考代码:
import csv with open("你的CSV文件路径.csv", "r", encoding="utf-8") as fileobj: csvreader = csv.reader(fileobj) next(csvreader, None) # 跳过表头 for rows in csvreader: # 以你给出的示例行 ['Parkinson Exercices FR', 'MEDICAL', '', '3', '1000', '0'] 为例 # 前3个字段保留字符串,后3个字段转换为浮点型,空值自定义默认值 str_col1, str_col2, str_col3, num_col1_str, num_col2_str, num_col3_str = rows num_col1 = float(num_col1_str) if num_col1_str.strip() else 0.0 num_col2 = float(num_col2_str) if num_col2_str.strip() else 0.0 num_col3 = float(num_col3_str) if num_col3_str.strip() else 0.0 # 后续直接使用对应类型的变量即可
- 方案2:修正CSV格式后使用
csv.QUOTE_NONNUMERIC
如果你的CSV设计规范要求字符串加引号、数字不加引号,可以先修正CSV文件,给所有字符串字段补充双引号包裹,再使用quoting=csv.QUOTE_NONNUMERIC参数即可自动完成类型转换。 - 方案3:用pandas自动识别类型(适合字段多的场景)
如果CSV字段较多不想手动逐个转换,可以用pandas库的read_csv方法自动识别字段类型,参考代码:
import pandas as pd df = pd.read_csv("你的CSV文件路径.csv") # 读取后可通过df["列名"]直接调用对应类型的数据,字符串和数值类型会自动识别
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

