Округление числа с плавающей запятой до наименьшего числа с сохранением нескольких знаков после запятой

#python #pandas

#python #pandas

Вопрос:

Мне нужно округлить столбец с плавающей запятой до 2 знаков после запятой, но без округления данных до ближайшего значения

Мои данные:

 df = pd.DataFrame({'numbers': [1.233,1.238,5.059,5.068, 8.556]})
df.head()
    numbers
0   1.233
1   1.238
2   5.059
3   5.068
4   8.556
  

Ожидаемый результат:

     numbers
0   1.23
1   1.23
2   5.05
3   5.06
4   8.55
  

Проблема

Все, что я пробовал, округляет числа до ближайшего числа (0-4 равно 0, а 5-9 добавляется 1 к усеченному десятичному разряду)

Примеры того, что не сработало

 df[['numbers']].round(2)
#or df['numbers'].apply(lambda x: "%.2f" % x)

#output
    numbers
0   1.23
1   1.24
2   5.06
3   5.07
4   8.56
  

Комментарии:

1. Как и в случае с математическим пакетом в большинстве языков высокого уровня, вы ищете floor функцию с ее аргументом precision.

2. @Prune Я посмотрел math.floor и np.floor, но они округляют число до целого

3. Правильно … итак, если ваша единица измерения равна «центам» или «сотым» … ?

4. @Prune Числа могут содержать ‘n’ знаков после запятой, но мне нужно разделить их на два

5. Правильно … итак… неважно, я вижу, что идея, которую я хотел, чтобы вы вывели, явно представлена в принятом ответе.

Ответ №1:

Это больше похоже на округление в меньшую сторону

 df.numbers*100//1/100
Out[186]: 
0    1.23
1    1.23
2    5.05
3    5.06
4    8.55
Name: numbers, dtype: float64
  

Ответ №2:

Попробуйте это, также хорошо работает

 import pandas as pd
do = lambda x: float(str(x).split('.')[0]  '.'   str(x).split('.')[1][0:2])
df = pd.DataFrame({'numbers': list(map(do, [1.233,1.238,5.059,5.068, 8.556]))})
print(df.head())

  

вывод

 numbers
0     1.23
1     1.23
2     5.05
3     5.06
4     8.55
  

Комментарии:

1. Я не думаю, что преобразование числа с плавающей точкой в строку — хорошая идея, но спасибо за усилия 🙂

2. кстати, если число с плавающей запятой содержит более 3 знаков после запятой, код не работает =/