CSV文件带引号字符串转float报错:ValueError问题求助
解决CSV字符串转float的ValueError问题
问题原因
你的错误提示ValueError: could not convert string to float: '"1151226468812.22"'已经说得很清楚:要转换的字符串带着双引号("1151226468812.22"),而float()函数无法解析带引号的内容。
出现这个问题是因为你设置了quoting=csv.QUOTE_NONE,这会让CSV reader完全跳过引号处理,直接把原始的带引号字符串返回给你。
解决方案
有两种实用的处理方式,优先推荐第一种:
方法1:正确配置CSV reader的quoting参数
CSV格式里带引号的字段是标准写法,你可以通过设置合适的quoting参数,让reader自动帮你去掉字段周围的引号:
import csv with open('你的数据文件.csv', 'r') as datafile: # 使用QUOTE_MINIMAL(默认值,也可以省略)或QUOTE_ALL,自动处理带引号的字段 datareader = csv.reader(datafile, delimiter=",", quoting=csv.QUOTE_MINIMAL) names = ["local_timestamp", "nse_timestamp"] for row in datareader: data = {} data["local_timestamp"] = row[0] # 此时row[1]已经是不带引号的数字字符串,直接转float即可 data["nse_timestamp"] = float(row[1]) # 这里可以添加后续的数据处理逻辑
如果你的CSV里所有带引号的字段都是数字,也可以尝试csv.QUOTE_NONNUMERIC——它会把非引号包裹的字段自动转成数字类型,但要注意其他字段的类型是否符合你的预期。
方法2:手动去除字符串两端的引号
如果因为特殊原因不能修改quoting参数,可以手动用strip('"')去掉字符串前后的双引号,再转成float:
import csv with open('你的数据文件.csv', 'r') as datafile: datareader = csv.reader(datafile, delimiter=",", quoting=csv.QUOTE_NONE) names = ["local_timestamp", "nse_timestamp"] for row in datareader: data = {} data["local_timestamp"] = row[0] # 先清理引号,再转换类型 clean_timestamp = row[1].strip('"') data["nse_timestamp"] = float(clean_timestamp) # 这里可以添加后续的数据处理逻辑
注意事项
- 优先选方法1,因为它遵循CSV的标准解析规则,能避免其他潜在格式问题(比如字段内部包含逗号的情况)。
- 如果你的CSV里存在字段内部包含双引号的特殊情况(比如
"hello""world"),方法2可能会出错,此时必须用方法1让reader正确解析。
内容的提问来源于stack exchange,提问作者vipul gangwar
相关产品推荐
相关产品推荐

