Apply Formatting to Each Column in Dataframe Using a Dict Mapping

dataframe, dictionary, formatting, pandas, python

Solution

The easiest way would be to iterate through the `format_mapping` dictionary and then apply on the column (denoted by the key) the formatting denoted by the `value`. Example -

for key, value in format_mapping.items():
    df[key] = df[key].apply(value.format)

Demo -

In [62]: df = pd.DataFrame(data={'Currency': {0: 111.23, 1: 321.23},
   ....:                    'Int': {0: 23, 1: 3},
   ....:                    'Rate': {0: 0.03030, 1: 0.09840}}
   ....:             )

In [63]:

In [63]: format_mapping={'Currency': '${:,.2f}', 'Int': '{:,.0f}', 'Rate': '{:.2f}%'}

In [64]: for key, value in format_mapping.items():
   ....:     df[key] = df[key].apply(value.format)
   ....:

In [65]: df
Out[65]:
  Currency Int   Rate
0  $111.23  23  0.03%
1  $321.23   3  0.10%

Problem

Problem Setup ``` import pandas as pd df = pd.DataFrame(data={'Currency': {0: 111.23, 1: 321.23}, 'Int': {0: 23, 1: 3}, 'Rate': {0: 0.03030, 1: 0.09840}} ) ``` Produces the following DataFrame ``` Currency Int Rate 0 111.23 23 0.0303 1 321.23 3 0.0984 ``` I want to apply very specific formatting to each column in the dataframe using a dict like the following: ``` format_mapping={'Currency': '${:,.2f}', 'Int': '{:,.0f}', 'Rate': '{:.2f}%'} ``` I know I can use applymap for multiple columns or apply on a single column: ``` #All columns df = df.applymap('{:.2f}%'.format) #Specific columns df['Rate'] = df['Rate'].apply('{:.2f}%'.format) ``` Question How can I iterate through each column in a dataframe and apply formatting using a dictionary where the `dict` `key` is the `column` and the `value` is the `string` formatting? End result would look like this (ignore the fact that percent wasn't multiplied by 100 for now) ``` Currency Int Rate 0 $111.23 23 0.03% 1 $321.23 3 0.10% ```

Original source