Хороший вопрос. Это недокументированная причуда. На самом деле, 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