#pandas #dataframe #rounding
#pandas #фрейм данных #округление
Вопрос:
У меня есть следующий пример фрейма данных:
Market Value
0 282024800.37
1 317460884.85
2 1260854026.24
3 320556927.27
4 42305412.79
Я пытаюсь округлить значения в этом фрейме данных до ближайшего целого числа. Желаемый результат:
Market Value
282024800
317460885
1260854026
320556927
42305413
Я пытался:
df.values.round()
и результат был
Market Value
282025000.00
317461000.00
1260850000.00
320557000.00
42305400.00
Что я делаю не так?
Спасибо
Ответ №1:
Это может быть более уместным в качестве комментария, но помещено здесь для правильного формата.
Я не могу получить ваш результат. С помощью numpy 1.18.1 и Pandas 1.1.0,
df.round().astype('int')
дает мне:
Market Value
0 282024800
1 317460885
2 1260854026
3 320556927
4 42305413
Единственное, о чем я могу думать, это то, что у вас может быть 32-разрядная система, где
df.astype('float32').round().astype('int')
дает мне
Market Value
0 282024800
1 317460896
2 1260854016
3 320556928
4 42305412
Ответ №2:
Следующее сохранит вашу информацию о данных в целости, поскольку при размещении с плавающей точкой она будет отображаться / печататься до ближайшего int.
Большое предостережение: это возможно только для ОДНОВРЕМЕННОГО применения ко ВСЕМ фреймам данных (это опция для pandas), а не только к одному фрейму данных.
pd.set_option("display.precision", 0)
Ответ №3:
Если вам нравится решение @noah, но вы не хотите возвращать переменные обратно, если вы что-то выводите, вы можете использовать следующую вспомогательную функцию:
import pandas as pd
from contextlib import contextmanager
@contextmanager
def temp_pandas_options(options):
seen_options = set()
old_values = {}
if isinstance(options, dict):
options_pairs = list(options.items())
else:
options_pairs = options
for option, value in options_pairs:
assert not option in seen_options, f"Already saw option {option}"
old_values[option] = pd.get_option(option)
pd.set_option(option, value)
yield
for option, old_value in old_values.items():
pd.set_option(option, old_value)
Затем вы можете запустить
with temp_pandas_options({'display.float_format': '{:.0f}'.format}):
print(market_value_df)
и получаем
Market value
0 282024800
1 317460885
2 1260854026
3 320556927
4 42305413