首页 文章

当我从csv文件的特定列读取字符串并尝试将其解析为浮点数时,为什么Python会抛出错误?

提问于
浏览
0

我使用以下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 回答

  • 1

    跳过大概是你的 Headers 行

    with open('file.csv') as p:
         rows = csv.reader(p)
         for row in rows[1:]
             numbers = float(row[3])
    
  • 2

    尝试 print row[3] ,你会看到至少一旦你得到你提供的错误中所示的字符串 RVAL ,它认为 float('RVAL') 失败 .

  • 1

    该特定行在该列中包含文本 RVAL .

    您可以通过修改代码来确认这一点来处理错误:

    try:
        numbers = float(row[3])
    except ValueError, err:
        print("Failed while trying to convert to float: '%s'" % row[3])
        raise
    

相关问题