2017-05-10 129 views
1

爲了比較起見,Pandas如何存儲漂浮物?我跑了一個簡單的檢查值,它返回了我的預期,但結果與我的查詢/比較不一樣:熊貓漂浮比較

爲什麼每個時間點的值都不一樣?

我試着重新運行這個,先把這個列轉換成int然後比較結果什麼都沒有。

+0

你知道大多數浮點運算如何涉及舍入嗎?這甚至包括整數到浮點數的轉換。你的int變圓了。 – user2357112

+0

不使用浮點時間戳。使用int64(這就是熊貓如何在時間戳下存儲時間戳)。 –

回答

0

你漂浮在紀元以來毫微秒,所以要轉換試試這個:

代碼;

df.time = df.time.astype('datetime64[ns]') 

測試代碼:

df = pd.DataFrame([1484314274417920512., 1484314274417620224.], 
        columns=['time']) 
print(df) 

df.time = df.time.astype('datetime64[ns]') 
print(df) 

結果:

  time 
0 1.484314e+18 
1 1.484314e+18 
          time 
0 2017-01-13 13:31:14.417920512 
1 2017-01-13 13:31:14.417620224 

但是:

當您從原始數據源進行轉換時,問題很可能出現。將int64轉換爲float64已經失去了一些精度,所以將它轉換爲納秒,可能仍然不能滿足你的需求。有些事情可以做到:

  1. 直接執行原始轉換爲int64,以免失去精度。

  2. 如果不需要納秒,則將時間戳四捨五入到微秒或毫秒。

+0

事情是我一行一行地填充我的數據框,時間來自我的數據源作爲一個int,但熊貓因爲某種原因強制它浮動,無論我嘗試什麼。我試過np.int64(),長(),什麼也沒有。兩個熊貓都返回float64。 – guy

+0

發現了這個問題,我用'.loc'逐行填充我的數據框,它強制所有的數值都是'float64'類型,無論我的值是整數。我的解決方法是將這些整數轉換爲字符串,因此大熊貓會將它們留在一起,然後使用'.type(int) – guy