我有一个包含许多列的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)
答案 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
。