Jason S Jason S - 4 months ago 24
Python Question

how to display pandas DataFrame using a format string for columns?

I would like to display a pandas dataframe with a given format using

print()
and the IPython
display()
. For example:

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


I would like to somehow coerce this into printing

cost
foo $123.46
bar $234.57
baz $345.68
quux $456.79


without having to modify the data itself or create a copy, just change the way it is displayed.

How can I do this?

Answer
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)

yields

        cost
foo  $123.46
bar  $234.57
baz  $345.68
quux $456.79

but this only works if you want every float to be formatted with a dollar sign.

Otherwise, if you want dollar formatting for some floats only, then I think you'll have to pre-modify the dataframe (converting those floats to strings):

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)

yields

         cost       foo
foo   $123.46  123.4567
bar   $234.57  234.5678
baz   $345.68  345.6789
quux  $456.79  456.7890