Python Pandas使用Dict映射将格式应用于Dataframe中的每个列

时间:2015-09-23 16:39:56

标签: python dictionary pandas formatting dataframe

问题设置

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

生成以下DataFrame

   Currency  Int    Rate
0    111.23   23  0.0303
1    321.23    3  0.0984

我想使用如下所示的dict将非常具体的格式应用于数据框中的每一列:

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

我知道我可以将applymap用于多个列或应用于单个列:

#All columns
df = df.applymap('{:.2f}%'.format)
#Specific columns
df['Rate'] = df['Rate'].apply('{:.2f}%'.format)

问题

如何遍历数据框中的每一列并使用字典应用格式,dict keycolumnvalue为{{1}格式化?

最终结果看起来像这样(忽略百分比现在没有乘以100的事实)

string

2 个答案:

答案 0 :(得分:6)

最简单的方法是遍历format_mapping字典,然后在列(由键表示)上应用value表示的格式。示例 -

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

演示 -

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%

答案 1 :(得分:3)

在 2021 年(Pandas 1.2.3),您可以使用 df.style.format()

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},
    }
)
format_mapping = {"Currency": "${:,.2f}", "Int": "{:,.0f}", "Rate": "{:.2f}%"}

df.style.format(format_mapping)

styled pandas dataframe

更多信息:https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html#Finer-Control:-Display-Values