2015-12-01 80 views
1

我有一個熊貓數據框,我從csv閱讀。熊貓閱讀科學記數法並改變

我的一個列有值,其中包括NaNfloats,和科學記數法,即5.3e-23

我的問題是,正如我在CSV閱讀,熊貓認爲這些數據爲object dtype,而不是float32它應該。我猜是因爲它認爲科學記數法條目是字符串。

我試過在讀取dtype後使用df['speed'].astype(float)來轉換dtype,並試圖在使用df = pd.read_csv('path/test.csv', dtype={'speed': np.float64}, na_values=['n/a'])讀取dtype時指定dtype。這會拋出錯誤ValueError: cannot safely convert passed user dtype of <f4 for object dtyped data in column ...

到目前爲止,這些方法都沒有奏效。我錯過了一件非常簡單的事情嗎?

this question似乎表明我可以指定已知數字,可能會引發錯誤,但如果可能的話,我寧願將科學記數法轉換回浮點數。

編輯,以顯示數據從CSV的要求,在評論

7425616,12375,28,2015-08-09 11:07:56,0,-8.18644,118.21463,2,0,2 
7425615,12375,28,2015-08-09 11:04:15,0,-8.18644,118.21463,2,NaN,2 
7425617,12375,28,2015-08-09 11:09:38,0,-8.18644,118.2145,2,0.14,2 
7425592,12375,28,2015-08-09 10:36:34,0,-8.18663,118.2157,2,0.05,2 
65999,1021,29,2015-01-30 21:43:26,0,-8.36728,118.29235,1,0.206836151554794,2 
204958,1160,30,2015-02-03 17:53:37,2,-8.36247,118.28664,1,9.49242000872744e-05,7 
384739,,32,2015-01-14 16:07:02,1,-8.36778,118.29206,2,Infinity,4 
275929,1160,30,2015-02-17 03:13:51,1,-8.36248,118.28656,1,113.318511172611,5 
+0

你能顯示你的數據框中的一些數據嗎? –

+0

我無法重現該問題。用科學記數法讀取數值看起來效果不錯。你能提供一個小樣本數據集來證明問題嗎?您確定數據中沒有其他值導致錯誤嗎? – BrenBarn

+0

@BrenBarn,@Anton Protopopov,你認爲這是造成這種情況的'Infinity'嗎? – hselbie

回答

0

填補他們,我意識到這是infinity聲明引起在我的數據問題。使用查找和替換刪除此工作。

@Anton Protopopov答案也可以像@ DSM的評論一樣對我不打字df['speed'] = df['speed'].astype(float)

感謝您的幫助。

1

很難沒有看到你的數據說,但似乎問題,你行,它們含有別的東西,除了數字和「N/A '價值觀。您可以加載您的數據框,然後將其轉換爲數字,如that問題的答案所示。如果你有大熊貓版本> = 0.17.0那麼你可以使用下列內容:

df1 = df.apply(pd.to_numeric, args=('coerce',)) 

然後,你可以用NA下降的行值與dropna或以零與fillna