Формат / подавление научной нотации из результатов агрегации панд Python
Как можно изменить формат вывода из операции 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 ответов
конечно, ответ, который я связал в комментариях, не очень полезен. Вы можете указать свой собственный string converter так.
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))
вы можете использовать круглую функцию только для подавления научной нотации для конкретного фрейма данных:
df1.round(4)
или вы можете подавить глобально:
pd.options.display.float_format = '{:.4f}'.format
Если вы хотите использовать значения, скажем, как часть csvfile csv.писатель, числа могут быть отформатированы перед созданием списка:
df['label'].apply(lambda x: '%.17f' % x).values.tolist()