2015-04-14 1 views
1

Я пытаюсь округлить некоторые поплавки в ДФ 2 дп, но все кратные 10 округляется до 1 дп, поэтому 3,60 бы 3,6 и 12,40 бы 12,4 ...Pandas Python: почему np.round() 3.601626 до 2 dp возвращает 3.6?

У меня есть ДФ:

Values   A   B   C   D 
Question                          
A2   4.08642 4.144279 3.601626 3.983852 

мой код

np.round(df,2) 

выход

Values  A  B C  D 
Question                          
A2   4.09 4.14 3.6 3.98 

ожидаемый выход

Values  A  B  C  D 
Question                          
A2   4.09 4.14 3.60 3.98 

Как заставить np.round отображать «3.6» как «3.60»?

FYI - Я не хочу использовать форматирование строк, потому что мне нужно округлить эти числа.

+1

«Я не хочу использовать форматирование строк, потому что мне нужно округлять эти числа» - как эти две вещи связаны друг с другом? Почему нужно округлять числа, чтобы вы не хотели использовать форматирование строк? – user2357112

ответ

4

Проблема заключается не в округлении, а в том, как панды отображают DataFrame.

Вы можете установить float_format как:

pd.options.display.float_format = '${:,.2f}'.format 

Как объяснено более подробно в this answer.

+0

Это работает на поверхностном уровне, так как значение mean_df.values ​​все равно возвращается [[4.09 4.14 3.6 3.98]] –

1

Вы можете использовать строку formater, а затем использовать десятичное форма функции библиотеки десятичной вернуть номер еще раз:

Пример кода:

import decimal 
print(decimal.Decimal("{:.2f}".format(3.6))) 
+0

Я не думаю, что OP хочет изменить базовый тип dtype, который будет десятичным делать – EdChum

+0

все еще хороший метод, спасибо. –

1

Другой способ установить опцию pandasdisplay.float_format:

>>> pd.set_option('float_format', '{:,.2f}'.format) 
+2

Как это отличается от ответа shx2? – EdChum

+0

@edchum использует 'pd.options.display.float_format =', а другой использует 'pd.set_option (...)'. –

+0

Они оба имеют тот же базовый параметр – EdChum

Смежные вопросы