#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 знаков после запятой, код не работает =/