2016-05-17 72 views
3

這是一個錯誤?當我四捨五入時,它實際上返回不同的結果。熊貓四捨五入,這是一個錯誤?

import pandas as pd 
pd.set_option('precision', 10) 

pd.DataFrame([[1.446450001],[1.44645]]).round(4) 

結果

0 
0 1.4465 
1 1.4464 
+1

不是一個錯誤。 1.44645可能會以二進制形式存儲爲下舍入。 – piRSquared

+0

@piRSquared我該如何解決這個問題? – JOHN

+2

@piRSquared不,這是錯誤的。這是關於舍入策略 – MaxNoe

回答

5

這是不是一個錯誤 - 更確切地說,這是一個無證的怪癖。

DataFrame.round使用罩,其中下numpy.around:

對於值圓形十進制值的正中間,numpy的舍入到最接近偶數值。因此1.5和2.5圓至2.0,-0.5和0.5圓爲0.0,等等

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.around.html

更多讀數@百科:https://en.wikipedia.org/wiki/Rounding#Round_half_to_even

+1

修補程序在熊貓'round'文檔中添加註釋非常受歡迎:-)(https://github.com/pydata/pandas/blob/master/.github/CONTRIBUTING.md) – joris

+0

您應該添加信息關於爲什麼這樣做 – MaxNoe

2

有兩個不同的舍入策略

  • 像你這樣的第一輪可能已經在學校中學到了它,在一段時間(以5結尾)的值的一半處向上取整

  • 第二回合下一甚至

第一個策略有副作用,你在平均有正偏差,因爲中心始終關注更高。這是由第二個策略固定的,隨意決定舍入到下一個偶數值。

熊貓選擇使用numpy.around它實現了第二個策略。

+1

有沒有一所學校在熊貓學習四捨五入? – JOHN