我有以下df:
table:
A B C D
0 0.000000 0.000000 -0.002520 -0.002520
1 0.209772 0.016262 0.003411 0.024343
2 -0.006474 -0.000152 0.000152 0.000000
真正的df有大约12列和40行。
我想改变其格式:
我面临的问题是如何将格式应用于某些列,将其他格式应用于其他列。通常我会将格式应用于整个dfs,但不能单独应用于列。
所需的输出将是这样的:
table:
A B C D
0 0.00% 0.000% -0.000% -0.00%
1 0.20% 0.067% 0.001% 0.43%
2 -0.00% -0.000% 0.015% 0.00%
正如您在所需的输出列中所见,A和D四舍五入为2个有意义的数字,B和C四舍五入为3个有意义的数字并将%添加到所有输出
这是我尝试过但没有用的东西:
format_AD = "{0:.2f}%".format
format_BC= "{0:.3f}%".format
format_changeAD=[table.loc[:,['A','D']]]
format_changeBC=[table.loc[:,['B','C']]]
format_changeAD.apply(format_AD)
format_changeBC.apply(format_BC)
return table
答案 0 :(得分:3)
如果您创建包含格式的字典,则可以使用style.format
:
mapper = {'A': '{0:.2f}%',
'B': '{0:.3f}%',
'C': '{0:.3f}%',
'D': '{0:.2f}%'}
df.style.format(mapper)
或使用apply(默认情况下基于列,axis=0
)
df.apply(lambda x: x.apply(mapper[x.name].format))
A B C D
0 0.00% 0.000% -0.003% -0.00%
1 0.21% 0.016% 0.003% 0.02%
2 -0.01% -0.000% 0.000% 0.00%
如果您的格式和列数很少,您当然可以生成映射器字典。
答案 1 :(得分:1)
您可以使用applymap
并分配输出:
table[['A','D']]= table[['A','D']].applymap(format_AD)
table[['B','C']]= table[['B','C']].applymap(format_BC)
print (table)
A B C D
0 0.00% 0.000% -0.003% -0.00%
1 0.21% 0.016% 0.003% 0.02%
2 -0.01% -0.000% 0.000% 0.00%