我有一个我正在使用的数据框,其中包含大量列,我尝试尽可能高效地格式化它们。我有一堆列,所有列都以.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%}",...
有什么想法吗?谢谢!
答案 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以后的代码