Python()的文字无效()

时间:2015-11-20 04:42:44

标签: python floating-point literals rdd

我正在为我的数据挖掘项目使用HIGGS数据集。在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.518054485321044922e-01

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

有人可以帮我解决此错误消息吗?

2 个答案:

答案 0 :(得分:2)

如异常所示,

-8.854051232337951660e-不是有效的float in python

特别是,科学记数法很好但是在e - 您的数据格式错误之后需要有一些东西。以下是可以接受的;

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

如果您愿意,可以from the docs

  

浮点文字的一些例子:

     

3.14 10.。001 1e100 3.14e-10 0e0

没有尾随数字的数据并不意味着什么。没有e,python可以假定文字终止;通过附加数字,python可以扩展科学记数法

如果数据看起来很好但是python似乎无法弄清楚(应该是)正在进行的操作,请检查空白区域是否存在细微的错误格式在e和下一个数字之间

回复编辑

最后一点是关键。数据看起来对您有好处,但python抱怨;那是因为你如何解析"在python中,与你用眼睛和大脑解析的方式并不一致。你用什么来解析数据?你用逗号分开吗?当数字开始时会拆分(这会导致问题)。如上所述提出例外;对你来说,问题是追踪为什么要裁掉解析中的最后一位数。 (顺便说一下,这听起来像是一个新问题,而不是这个问题的延续。)

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

跳过错误的条目,您可以something like this(tl; dr尝试/除了他们,因为请求宽恕比获得许可更好)

答案 1 :(得分:0)

根据

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

解析器过早地分割该值。

因此,您应该看看分割时项目的外观。

所以试试

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

您将看到每件商品会发生什么。

就我个人而言,我不知道为什么会发生这种情况,除了一个损坏的数据文件,其中有一个行水槽或逗号它不应该有。