Подтвердить что ты не робот

Формат/Подавление научной нотации от Python Pandas Результаты агрегирования

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

Я знаю, как сделать форматирование строк в Python, но я не понимаю, когда применить его здесь.

df1.groupby('dept')['data1'].sum()

dept
value1       1.192433e+08
value2       1.293066e+08
value3       1.077142e+08

Это подавляет научную нотацию, если я преобразую в строку, но теперь мне просто интересно, как отформатировать строку и добавить десятичные дроби.

sum_sales_dept.astype(str)
4b9b3361

Ответ 1

Конечно, ответ, который я связал в комментариях, не очень полезен. Вы можете указать свой собственный преобразователь строк так.

In [25]: pd.set_option('display.float_format', lambda x: '%.3f' % x)

In [28]: Series(np.random.randn(3))*1000000000
Out[28]: 
0    -757322420.605
1   -1436160588.997
2   -1235116117.064
dtype: float64

Я не уверен, что это предпочтительный способ сделать это, но он работает.

Преобразование чисел в строки только для эстетических целей кажется плохой идеей, но если у вас есть веская причина, это один из способов:

In [6]: Series(np.random.randn(3)).apply(lambda x: '%.3f' % x)
Out[6]: 
0     0.026
1    -0.482
2    -0.694
dtype: object

Ответ 2

Вот еще один способ сделать это, похожий на ответ Дэна Аллана, но без лямбда-функции:

>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0    0.41
1    0.99
2    0.10

или же

>>> pd.set_option('display.float_format', '{:.2f}'.format)

Ответ 3

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

df1.round(4)

или вы можете подавить это глобально:

pd.options.display.float_format = '{:.4f}'.format

Ответ 4

Если вы хотите использовать значения, например, как часть csvfile csv.writer, цифры могут быть отформатированы перед созданием списка:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()

Ответ 5

Вы можете использовать df.style. Пытаться:

df1.style.format('{:.3f}')

Ответ 6

Если вы хотите стилизовать вывод фрейма данных в ячейке блокнота Jupyter, вы можете установить стиль отображения для каждого фрейма данных:

df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")

enter image description here

Смотрите документацию здесь.