我正在为我的数据挖掘项目使用 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
我已经核对过,数据没有出入。
有人可以帮我解决这个错误消息吗?
最佳答案
如异常所示,
-8.854051232337951660e- 不是有效的 float in python
特别是,科学计数法很好,但它需要在 e
之后有一些东西 - 您的数据格式不正确。以下是可以接受的;
- -8.854051232337951660e-1
- -8.854051232337951660
- -8.854051232337951660e1
或from the docs如果你愿意
Some examples of floating point literals:
3.14 10. .001 1e100 3.14e-10 0e0
没有尾随数字的数据没有任何意义。没有 e,python 可以假定文字终止;加上一个额外的数字,python 可以扩展科学记数法
如果数据对你来说看起来不错,但 python 似乎无法弄清楚发生了什么(应该是),请检查 之间的细微格式错误,如空格e
和下一个数字
回应编辑
最后一点很关键。数据看起来对你来说不错,但 python 提示;那是因为你在 python 中“解析”的方式与你用眼睛和大脑解析的方式不一致。你用什么来解析数据?你用逗号分开吗?当 digits 开始时你会 split 吗(这会导致问题)。如上所述引发异常;对您来说,问题在于追踪为什么要在解析中裁掉最后一位数字。 (顺便说一句,这对我来说听起来像是一个新问题,而不是这个问题的延续)。
例如,在您新发布的代码中,似乎在“e-”之后和“01”之前有一个换行符。如果那是我的浏览器,那么……哦,好吧。如果不是,那是你的问题
要跳过错误条目,您可以执行something like this (tl;dr try/except them, because it's better forgiveness than permission)
关于float() 的 Python 无效文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33819130/