将不同的格式应用于不同的列数据帧

时间:2017-05-10 10:08:48

标签: pandas

我有以下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

2 个答案:

答案 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%