Ваши числа округлены правильно. Ниже я объясню:
- Как показать 2-значную точность?
- Что происходило с данными примера?
1. Как показать 2-значную точность?
Если вы действительно хотите, чтобы отображало две цифры , вы можете полностью пропустить функцию округления (custom_round
) и просто запустить это * перед печатью вашего dataframes:
pd.options.display.float_format = '{:,.2f}'.format
При этом данные с плавающей запятой будут печататься с точностью до 2 цифр. Пример:
table=pd.DataFrame({'A': [0.62435, 0.542345,0.213452],
'B': [0.22426,0.18779,0.30346]})
In [1]: table
Out[1]:
A B
0 0.62 0.22
1 0.54 0.19
2 0.21 0.30
2. Что происходит с данными примера?
- Использование тех же данных, что и в вопросе
table=pd.DataFrame({'A': [0.62435, 0.542345,0.213452],
'B': [0.22426,0.15779,0.30346]})
# execute code with custom_round in the question
In [1]: table
Out[1]:
A B
0 0.60 0.20
1 0.55 0.15
2 0.20 0.30
- Установка среднего значения B на 0,18779 ( округлено до 0,20)
table=pd.DataFrame({'A': [0.62435, 0.542345,0.213452],
'B': [0.22426,0.18779,0.30346]})
# execute code with custom_round in the question
In [1]: table
Out[1]:
A B
0 0.60 0.2
1 0.55 0.2
2 0.20 0.3
Почему это происходит?
Внутренне , число округляется с точностью до двух ди git. Когда вы печатаете таблицу в консоли / блокноте Jupyter, pandas пропускает печать последнего значения (2nd di git), если все они являются нулями. Итак, данные - это двухзначная точность (например, 0.20), но это только что показано с одним di git precision , поскольку 0.20 = 0.2.
* Вы также можете использовать другую схему печати: pd.options.display.float_format
можно установить для любого вызываемого объекта, который
[...] принимает плавающую точку. number и верните строку с желаемым форматом числа. Это используется в некоторых местах, например в SeriesFormatter. См. Пример в core.format.EngFormatter.