Как обрезать значение до двух мест после точки без округления, питон - PullRequest
0 голосов
/ 09 октября 2019

Я ищу самый быстрый способ получить каждое значение в моем столбце, используя только две цифры после точки, без использования round()

pd.Series:

input:

1.42345
12.33444
111.66777
2.059999

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

1.42
12.33
111.66
2.05

Я думаю преобразовать его в строку, а затем использовать slice, но в срезе мне нужно использовать параметры запуска и остановки, это сложно, когда цифры раньше были разной длины.

Если не будет другого варианта, я буду использовать .str.extract(r'([0-9]{1,5}.[0-9]{2})'), но, может быть, есть? некоторые ограничения для отображения числа с плавающей запятой без округления?

это не дублирующаяся тема, решением этой проблемы является округление значений: Сокращение до трех десятичных знаков в Python

1 Ответ

2 голосов
/ 09 октября 2019

Один из вариантов - взять floordiv на 0.01 и снова разделить значение на 100:

s.floordiv(0.01).div(100)

0      1.42
1     12.33
2    111.66
3      2.05
dtype: float64

Это явно лучше, чемприведение к строке и извлечение до второго знака после запятой:

s = pd.Series(np.random.randn(1_000_000))

%timeit s.astype(str).str.extract(r'(\d+\.\d{2})')
# 1.76 s ± 42.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit s.floordiv(0.01).div(100)
# 42.1 ms ± 3.08 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit s//0.01/100
# 40.5 ms ± 3.31 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...