我使用以下python代码从csv文件中读取数字:
with open('file.csv') as p:
rows = csv.reader(p)
for row in rows:
numbers = float(row[3])
我知道虽然csv文件包含数字,但它们被读作字符串 . 最初我只是将字符串解析为float,但在这种情况下,当我尝试这样做时,Python会抛出一个错误:
Traceback (most recent call last):
File "C:/path/file.py", line 6, in <module>
numbers = float(row[3])
ValueError: could not convert string to float: RVAL
代码读取的csv文件中的列包含大约50,000个伪随机数,它们都在0和1之间 . 这些数字中的少数几个很小,以至于它们在文件中呈指数形式,例如: 0.09932E-05 . 我怀疑这可能是导致问题的原因,但我注意到即使在读取和打印为字符串时,较小的数字(如0.09932E-05)也会保留所有完整的原始小数位 . 这让我不确定 .
这可能是原因还是我错过了另一个原因?
我该如何解决问题的根本原因?我要求将数字从字符串解析为浮点数/小数,以便我可以将它们放在数组中并按数字顺序排序 . 我显然不能这样做,而他们仍然是字符串 .
编辑:
很明显,“RVAL”是导致问题的原因,并且出于某种原因我错过了这个 . 我想这表明开发人员需要在深入搜索并询问stackoverflow之前查看显而易见的内容 .
3 回答
跳过大概是你的 Headers 行
尝试
print row[3]
,你会看到至少一旦你得到你提供的错误中所示的字符串RVAL
,它认为float('RVAL')
失败 .该特定行在该列中包含文本
RVAL
.您可以通过修改代码来确认这一点来处理错误: