格式化Pandas Dataframe中的多个列

时间:2018-03-14 20:41:22

标签: python pandas jupyter-notebook

我有一个我正在使用的数据框,其中包含大量列,我尝试尽可能高效地格式化它们。我有一堆列,所有列都以.pct结尾,需要格式化为百分比,一些以.cost结尾,需要格式化为货币等。

我知道我可以这样做:

cost_calc.style.format({'c.somecolumn.cost'       : "${:,.2f}",
                        'c.somecolumn.cost'       : "${:,.2f}",
                        'e.somecolumn.cost'       : "${:,.2f}",
                        'e.somecolumn.cost'       : "${:,.2f}",...

并单独格式化每一列,但我希望有办法做类似的事情:

cost_calc.style.format({'*.cost'       : "${:,.2f}",
                        '*.pct'        : "{:,.2%}",...

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

如果您可以自动构建该字典,第一种方式似乎并不坏...您可以生成适合* .cost描述的所有列的列表,如

1000

然后建立你的dict,如:

costcols = [x for x in df.columns.values if x[-5:] == '.cost']

然后如你所知:

formatdict = {}
for costcol in costcols: formatdict[costcol] = "${:,.2f}"

您可以类似地轻松添加.pct案例。希望这有帮助!

答案 1 :(得分:1)

我会使用带有dict生成器的regEx:

import re
mylist = cost_calc.columns

r = re.compile(r'.*cost')
cost_cols = {key: "${:,.2f}" for key in mylist if r.match(key)}

r = re.compile(r'.*pct')
pct_cols = {key: "${:,.2f}" for key in mylist if r.match(key)}

cost_calc.style.format({**cost_cols, **pct_cols})

注意:Python 2.7和3以后的代码