Округление Pandas

#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