Формат/Подавление научной нотации от 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)
Ответы
Ответ 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]()
Смотрите документацию здесь.