How to display pandas DataFrame of floats 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?

    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

From: stackoverflow.com/q/20937538