2015-11-20 104 views
2

我为我的数据挖掘项目使用HIGGS数据集。在解析Python中的数据时,我收到以下错误:Python无效浮点数()

ValueError: invalid literal for float(): -8.854051232337951660e- 

对于许多相同类型的值,我得到此错误。我正在使用Apache Spark作为分布式环境。

这是我在数据集中的一行。

1.000000000000000000e+00,8.004817962646484375e-01,-3.643184900283813477e-01,-4.785313606262207031e-01,2.399173498153686523e+00,**-8.854051232337951660e-01**,1.204909682273864746e+00,-8.518521487712860107e-02,1.364478588104248047e+00,0.000000000000000000e+00,4.605550169944763184e-01,1.564514338970184326e-01,1.068501710891723633e+00,0.000000000000000000e+00,1.793796300888061523e+00,1.236290574073791504e+00,5.773849487304687500e-01,2.548224449157714844e+00,1.083405137062072754e+00,1.178002059459686279e-01,-1.116195082664489746e+00,0.000000000000000000e+00,8.484367132186889648e-01,1.113812208175659180e+00,9.878969192504882812e-01,5.820630192756652832e-01,4.325648546218872070e-01,1.004681587219238281e+00,8.44922e-01 

我已经检查过,没有数据差异。

有人可以帮我解决这个错误信息吗?

回答

2

作为例外表明,

-8.854051232337951660e-不是有效float in python

尤其科学记数法是好的但它需要有东西之后e - 您的数据格式不正确。以下是可以接受的;

  • -8.854051232337951660e-1
  • -8.854051232337951660
  • -8.854051232337951660e1

或者from the docs如果你喜欢

浮点文字的一些例子:

3.14 10..0 01 1e100 3.14e-10 0e0

没有尾随数字的数据并不意味着什么。没有e,Python可以假定文字已经终止;如果数据看起来不错但python似乎无法弄清楚应该是什么(应该是),检查微妙的错误,在e和下一个数字

之间格式化像空格在响应编辑

最后一点是关键。数据看起来不错,但蟒蛇抱怨;这是因为你如何在python中“解析”并不符合你用眼睛和大脑解析的方式。你用什么来解析数据?你用逗号分隔吗?你是否在数字开始分裂(这会导致问题)。例外情况如上所述;对于你来说,问题是追踪为什么你在解析时裁剪出最后一位数字。 (顺便说一句,这听起来像是一个新问题,而不是这个问题的延续)。

例如,在新发布的代码中,看起来像在“e-”之后和“01”之前有一个换行符。如果这是我的浏览器,那么......哦,好吧。如果没有,那么这就是你的问题

跳过错误项,你可以做something like this(TL;博士尝试/除了他们,因为这是更好地请求原谅比许可)

+0

事实上,无论它出现在哪里,我都只会在这个特定值上出错。 – Shinchan

+1

然后你的解析器有一个一致的问题(很好!重现性使得调试更加容易)。该文字是完全有效的(后面的数字),手动插入python并检查自己。该数字被裁剪,这是一个解析问题,不是铸造问题 –

+0

也感谢您(1)发布堆栈跟踪,然后(2)发布您的数据。使问题更容易回答 –

0

ValueError: invalid literal for float(): -8.854051232337951660e- 

解析器分裂了该值为时尚早。

因此,你应该看看这些项目在拆分时的样子。

所以尽量

for x in line.split(','): 
    print repr(x), 
    print repr(float(x)) 

,你会看到每个项目会发生什么。

就个人而言,我不知道为什么,这可能只是具有线breadk或逗号它不应该有一个损坏的数据文件发生。