[英]Pandas read scientific notation and change
我在 Pandas 中有一個數據框,我正在從 csv 中讀取它。
我的一列的值包括NaN
、 floats
和科學記數法,即5.3e-23
我的問題是,當我在 csv 中閱讀時,pandas 將這些數據視為object dtype
,而不是它應該是的float32
。 我猜是因為它認為科學記數法條目是字符串。
我嘗試在讀入后使用df['speed'].astype(float)
轉換df['speed'].astype(float)
,並嘗試使用df = pd.read_csv('path/test.csv', dtype={'speed': np.float64}, na_values=['n/a'])
指定正在讀入的df = pd.read_csv('path/test.csv', dtype={'speed': np.float64}, na_values=['n/a'])
。 這將引發錯誤ValueError: cannot safely convert passed user dtype of <f4 for object dtyped data in column ...
到目前為止,這兩種方法都沒有奏效。 我是否錯過了一些非常容易修復的東西?
這個問題似乎表明我可以指定可能會引發錯誤的已知數字,但如果可能的話,我更願意將科學記數法轉換回浮點數。
編輯以在評論中顯示來自 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
我意識到這是導致我的數據出現問題的infinity
語句。 通過查找和替換來刪除它。
@Anton Protopopov 的回答也和@DSM 關於我沒有輸入df['speed'] = df['speed'].astype(float)
。
謝謝您的幫助。
就我而言,使用pandas.round()有效。
df['column'] = df['column'].round(2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.