用浮点数和前导零格式化熊猫数据帧

时间:2021-05-20 17:35:29

标签: python pandas

我有一个数据框,我需要以一种非常特殊的方式显示(而不是修改)浮点值。

df = pd.DataFrame([1000.5, 100000.78, -90000, -900.4],
                  index=['row1','row2','row3','row4'],
                  columns=['amount'])
print(df)

        amount
row1    1000.50
row2  100000.78
row3  -90000.00
row4    -900.40

整个字符串应该是 9 个字符长(包括减号和小数点分隔符) , int 部分应该有前导零,

小数部分也应该有补零并限制为2位小数

我想将其强制打印(不修改原始值):

            amount
row1    001000.50
row2    100000.78
row3    -90000.00
row4    -00900.40

这是我在没有多少运气的情况下尝试的:

df['amount'].apply(lambda x: f'{x:.2f}')
df['newamount'] = df['amount'].astype(str)
width = 9
df['newamount']= df['newamount'].str.zfill(width)
print(df)

       amount   newamount
row1    1000.50     0001000.5
row2  100000.78     100000.78
row3  -90000.00     0-90000.0
row4    -900.40     000-900.4

请记住,数据框中还有其他浮动列不应以这种方式显示

1 个答案:

答案 0 :(得分:0)

您可以将显示 float_format 选项设置为 '{:09.2f}'.format

pd.options.display.float_format = '{:09.2f}'.format
df    
        amount
row1 001000.50
row2 100000.78
row3 -90000.00
row4 -00900.40

但这只会改变当前的显示。如果需要创建新列,可以使用 f 字符串:

df['newamount'] = df.amount.apply(lambda x: f'{x:09.2f}')
df    
         amount  newamount
row1    1000.50  001000.50
row2  100000.78  100000.78
row3  -90000.00  -90000.00
row4    -900.40  -00900.40