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


Как можно изменить формат вывода из операции groupby в 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)
4 69

4 ответа:

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

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

вот еще один способ сделать это, почти так же, как выше:

pd.options.display.float_format = '{:.2f}'.format
Series(np.random.randn(3))

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

df1.round(4)

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

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

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

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