2016-05-17 6 views
3

これはバグですか?私が小数点以下4桁目で四捨五入すると、実際には異なる結果が返されます。パンダ丸め、これはバグですか?

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のは最も近い偶数値に丸め。等0.0から2.0、-0.5及び0.5ラウンドすることが1.5と2.5ラウンド、ウィキペディア@

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' docstringにこれに関するノートを追加するパッチは、大歓迎です:-)(https://github.com/pydata/pandas/blob/master/.github/CONTRIBUTING.md) – joris

+0

なぜこれが行われたのか – MaxNoe

2

二つの異なる丸め戦略

    があります
  • あなたが学校で学んだような最初のラウンドは、(5で終わる)インターバルの正確な半分の値は上に丸められます

  • 第二ラウンドの次のにさえ

は最初の戦略は、中心は常に高くチューニングされているので、あなたの平均では、正のバイアスを持っていること、副作用があります。これは、次の偶数値に丸めるという恣意的な決定を伴う第2の戦略によって修正される。

パンダは、第2の戦略を実装するnumpy.aroundを使用することを選択しました。

+1

パンダで丸ごと学ぶ学校はありますか? – JOHN

関連する問題