2015-11-20 143 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或逗號它不應該有一個損壞的數據文件發生。