Панды конвертируют float в int, если десятичные дроби равны 0 - PullRequest
1 голос
/ 30 сентября 2019

У меня есть фрейм данных pandas, в котором некоторые столбцы имеют числовые значения, а другие нет, как показано ниже:

City          a     b       c
Detroit       129   0.54    2,118.00
East          188   0.79    4,624.4712
Houston       154   0.65    3,492.1422
Los Angeles   266   1.00    7,426.00
Miami         26    0.11    792.18
MidWest       56    0.24    772.7813

Я хочу округлить эти числовые значения до 2 десятичных знаков, для которыхЯ использую:

df = df.replace(np.nan, '', regex=True)

После чего df становится:

City          a       b       c
Detroit       129.0  0.54   2,118.0
East          188.0  0.79   4,624.47
Houston       154.0  0.65   3,492.14
Los Angeles   266.0  1.0    7,426.0
Miami         26.0   0.11   792.18
MidWest       56.0   0.24   772.78

В основном работает нормально, но также преобразует правильные целые числа в десятичные, т. Е. Значения, подобные 100, округляются до100,0. Я хочу, чтобы кадр данных был таким:

City          a       b         c
Detroit       129    0.54      2,118
East          188    0.79      4,624.47
Houston       154    0.65      3,492.14
Los Angeles   266    1         7,426
Miami         26     0.11      792.18
MidWest       56     0.24      772.28

Я хочу сохранить такие значения как собственные целые числа, округляя остальные до 2 десятичных знаков во всех числовых столбцах. Как я могу это сделать?

1 Ответ

1 голос
/ 30 сентября 2019

Использование g format:

Общий формат. Для заданной точности p> = 1 это округляет число до p значащих цифр, а затем форматирует результат либо в формате с фиксированной запятой, либо в научной записи в зависимости от его величины.

Точные правила заключаются в следующем: предположим, что результат, отформатированный с типом представления 'e' и точностью p-1, будет иметь экспоненту exp. Тогда, если -4 <= exp <p, число форматируется с типом представления 'f' и точностью p-1-exp. В противном случае число форматируется с типом представления 'e' и точностью p-1. В обоих случаях незначительные завершающие нули удаляются из значимых символов, а десятичная точка также удаляется, если после нее нет оставшихся цифр, если не используется опция «#». </p>

Положительная и отрицательная бесконечность, положительная иОтрицательный ноль и nans форматируются как inf, -inf, 0, -0 и nan соответственно, независимо от точности.

Точность 0 рассматривается как эквивалент точности 1. Точность по умолчаниюсоставляет 6.

df.update(df.select_dtypes(include=np.number).applymap('{:,g}'.format))
print (df)
          City    a     b         c
0      Detroit  129  0.54     2,118
1         East  188  0.79  4,624.47
2      Houston  154  0.65  3,492.14
3  Los Angeles  266     1     7,426
4        Miami   26  0.11    792.18
5      MidWest   56  0.24   772.781
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...