Как отобразить панд 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


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



как я могу это сделать?

675   5  

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

который выводит

enter image description here

это объект представления; сам фрейм данных не изменяет форматирование, но обновления в фрейме данных отражаются в представлении:

constants.name = ['pie','eek']
C

enter image description here

это кажется, есть некоторые ограничения:
  • добавление новых строк и/или столбцов на месте, похоже, вызывает несогласованность в стилизованном представлении (не добавляет метки строк / столбцов):

    constants.loc[2] = dict(name='bogus', value=123.456)
    constants['comment'] = ['fee','fie','fo']
    constants
    

enter image description here

который выглядит хорошо, но:

C

enter image description here

  • форматирование работает только для значений, а не для индекса записи:

    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
    

enter image description here

подобно 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

    Ничего не найдено.