使用pandas在to_csv期间使用美元符号格式化两列

时间:2017-07-13 14:19:25

标签: python pandas

我有一个包含许多列的csv合并。我在格式化价格列时遇到问题。我需要让它们遵循这种格式$ 1,000.00。我可以使用一个函数来实现这两个列(销售价格和付款金额)吗?到目前为止,这是我的代码:

    df3 = pd.merge(df1, df2, how='left', on=['Org ID', 'Org Name'])
    cols = ['Org Name', 'Org Type', 'Chapter', 'Join Date', 'Effective Date', 'Expire Date', 
'Transaction Date', 'Product Name', 'Sales Price',  
            'Invoice Code', 'Payment Amount', 'Add Date']
    df3 = df3[cols]
    df3 = df3.fillna("-")
    out_csv = root_out + "report-merged.csv"
    df3.to_csv(out_csv, index=False)

我认为可以解决的解决方案但是我收到错误(ValueError:未知的格式代码' f'对于' str'类型的对象)

df3['Sales Price'] = df3['Sales Price'].map('${:,.2f}'.format)

1 个答案:

答案 0 :(得分:3)

根据您的错误("Unknown format code 'f' for object of type 'str'"),您尝试格式化的列将被视为字符串。因此,在下面的代码中使用.astype(float)可解决此问题。

to_csv电话的(内)期间,没有很好的方法可以设置此格式。但是,在中间行中,您可以使用:

cols = ['Sales Price', 'Payment Amount']
df3.loc[:, cols] = df3[cols].astype(float).applymap('${:,.2f}'.format)

然后拨打to_csv