Панды округления десятичных дробей не работает - PullRequest
0 голосов
/ 14 мая 2018

Может кто-нибудь объяснить, что со мной происходит, или я упускаю что-то действительно очевидное?

import pandas as pd
df = pd.DataFrame([[0.0094909865]])
df = df.round(9)
print(df)

Это дает мне 0,009490986 .

Я ожидал округленное значение 0,009490987

Может кто-нибудь помочь мне понять? Я использую Pandas '0.20.3'

1 Ответ

0 голосов
/ 14 мая 2018

Хороший вопрос. Это недокументированная причуда. На самом деле, DataFrame.round использует numpy.around. Это должно быть упомянуто в документации панд .


numpy.around() выполняет следующие действия:

Для значений точно посередине между округленными десятичными значениями, Numpy округляет до ближайшего четного значения. Таким образом 1,5 и 2,5 округляют до 2,0, -0,5 и от 0,5 до 0,0 и т. д.

Подробнее см. Справочник .

Чтобы достичь желаемого, вы можете сделать следующее:

from math import ceil, floor
import pandas as pd

df = pd.DataFrame([[0.0094909865]])

def float_round(num, places = 0, direction = floor):
    return direction(num * (10**places)) / float(10**places)

print( float_round(df.values,9,ceil) )
print( float_round(df.values,9) )

print( float_round(1.1389182804 ,9) )

Результаты

0.009490987
0.009490986

1.13891828
...