これはバグですか?私が小数点以下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
これはバグですか?私が小数点以下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
それはバグではありません - むしろ、それは文書化されていない癖です。
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
二つの異なる丸め戦略
あなたが学校で学んだような最初のラウンドは、(5
で終わる)インターバルの正確な半分の値は上に丸められます
第二ラウンドの次のにさえ数
は最初の戦略は、中心は常に高くチューニングされているので、あなたの平均では、正のバイアスを持っていること、副作用があります。これは、次の偶数値に丸めるという恣意的な決定を伴う第2の戦略によって修正される。
パンダは、第2の戦略を実装するnumpy.around
を使用することを選択しました。
パンダで丸ごと学ぶ学校はありますか? – JOHN
バグではありません。 1.44645はおそらく、切り捨てるものとしてバイナリとして格納されます。 – piRSquared
@piRSquaredどうすればこの問題を解決できますか? – JOHN
@ piRSquaredいいえ、これは間違っています。それは丸めの戦略についてです – MaxNoe