Как отобразить панд DataFrame поплавков с помощью строки формата для столбцов?
Я хотел бы отобразить панд dataframe с заданным форматом с помощью print() и IPython display(). Например:
df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890],
index=['foo','bar','baz','quux'],
columns=['cost'])
print df
cost
foo 123.4567
bar 234.5678
baz 345.6789
quux 456.7890
Я хотел бы как-то принудить это к печати
cost
foo 3.46
bar 4.57
baz 5.68
quux 6.79
без необходимости изменять сами данные или создавать копию, просто измените способ его отображения.
как я могу это сделать?
5 ответов:
import pandas as pd pd.options.display.float_format = '${:,.2f}'.format df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) print(df)доходность
cost foo 3.46 bar 4.57 baz 5.68 quux 6.79но это работает только, если вы хотите каждый float для форматирования со знаком доллара.
в противном случае, если вы хотите форматирование доллара только для некоторых поплавков, то я думаю, что вам придется предварительно изменить фрейм данных (преобразование этих поплавков в строки):
import pandas as pd df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) df['foo'] = df['cost'] df['cost'] = df['cost'].map('${:,.2f}'.format) print(df)доходность
cost foo foo 3.46 123.4567 bar 4.57 234.5678 baz 5.68 345.6789 quux 6.79 456.7890
Если вы не хотите изменять фрейм данных, вы можете использовать пользовательский форматер для этого столбца.
import pandas as pd pd.options.display.float_format = '${:,.2f}'.format df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) print df.to_string(formatters={'cost':'${:,.2f}'.format})доходность
cost foo 3.46 bar 4.57 baz 5.68 quux 6.79
по состоянию на панды 0.17 теперь есть система укладки который по существу обеспечивает форматированные представления фрейма данных с помощью строки формата Python:
import pandas as pd import numpy as np constants = pd.DataFrame([('pi',np.pi),('e',np.e)], columns=['name','value']) C = constants.style.format({'name': '~~ {} ~~', 'value':'--> {:15.10f} <--'}) Cкоторый выводит
это объект представления; сам фрейм данных не изменяет форматирование, но обновления в фрейме данных отражаются в представлении:
это кажется, есть некоторые ограничения:constants.name = ['pie','eek'] C
добавление новых строк и/или столбцов на месте, похоже, вызывает несогласованность в стилизованном представлении (не добавляет метки строк / столбцов):
constants.loc[2] = dict(name='bogus', value=123.456) constants['comment'] = ['fee','fie','fo'] constantsкоторый выглядит хорошо, но:
C
форматирование работает только для значений, а не для индекса записи:
constants = pd.DataFrame([('pi',np.pi),('e',np.e)], columns=['name','value']) constants.set_index('name',inplace=True) C = constants.style.format({'name': '~~ {} ~~', 'value':'--> {:15.10f} <--'}) C
подобно unutbu выше, вы также можете использовать
applymapследующим образом:import pandas as pd df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) df = df.applymap("${0:.2f}".format)
Я люблю панд.применить () с форматом python ().
import pandas as pd s = pd.Series([1.357, 1.489, 2.333333]) make_float = lambda x: "${:,.2f}".format(x) s.apply(make_float)кроме того, его можно легко использовать с несколькими столбцами...
df = pd.concat([s, s * 2], axis=1) make_floats = lambda row: "${:,.2f}, ${:,.3f}".format(row[0], row[1]) df.apply(make_floats, axis=1)





Comments