You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas to_excel批量将float64格式化为BRL货币字符串?

Pandas导出Excel时自动将所有float64列格式化为巴西雷亚尔(BRL)货币格式的实现方案

我正在使用Pandas的to_excel方法导出DataFrame至Excel文件,需要将所有float64类型的数值(无需指定具体列,因为列是可变的)导出为巴西雷亚尔(BRL)货币格式的字符串。

代码示例如下:

import pandas as pd
df = pd.DataFrame({'Numero': {0: '044121', 1: '044121'}, 'Serie': {0: '0', 1: '0'}, 'Finalidade': {0: '1', 1: '1'}, 
                  'CNPJ_CPF_Emit': {0: '01039778000177', 1: '01039778000177'}, 
                  'Rz_Emit': {0: 'VINHEDOS INDUSTRIA E COMERCIO DE PAPEIS LTDA.', 1: 'VINHEDOS INDUSTRIA E COMERCIO DE PAPEIS LTDA.'}, 
                  'PIS_Valor': {0: 1620.98, 1: 1210.42}, 'COFINS_Valor': {0: 7466.32, 1: 5575.28}, 'Valor_IPI': {0: 3628.22, 1: 2709.28}, 
                  'Valor_ICMS': {0: 13396.5, 1: 10003.5}, 
                  'Valor_Total_Nota': {0: 201337.5, 1: 201337.5}, 'Valor_Frete': {0: '', 1: ''}})

df.to_excel(my_path, index=False, freeze_panes=(1,0))

当前导出结果不符合需求,期望将数值列格式化为BRL货币字符串。请问是否可行?最优实现方式是什么?能否通过float_format参数实现?

可行性与实现方案

1. 关于float_format参数的局限性

float_format是to_csv专属的参数,to_excel并不支持这个参数,所以没法直接用它来实现Excel中的货币格式设置。

2. 最优实现方式:用xlsxwriter引擎设置单元格格式

要动态识别所有float64列并设置BRL货币格式,推荐用xlsxwriter引擎操作单元格格式,既能保留数值的可计算性,又能实现需求的显示效果,步骤如下:

  • 先安装依赖:pip install xlsxwriter
  • 核心逻辑:遍历DataFrame列,判断类型是否为float64,给这些列设置Excel的巴西雷亚尔货币格式(格式代码为R$ #,##0.00)

示例代码:

import pandas as pd

df = pd.DataFrame({'Numero': {0: '044121', 1: '044121'}, 'Serie': {0: '0', 1: '0'}, 'Finalidade': {0: '1', 1: '1'}, 
                  'CNPJ_CPF_Emit': {0: '01039778000177', 1: '01039778000177'}, 
                  'Rz_Emit': {0: 'VINHEDOS INDUSTRIA E COMERCIO DE PAPEIS LTDA.', 1: 'VINHEDOS INDUSTRIA E COMERCIO DE PAPEIS LTDA.'}, 
                  'PIS_Valor': {0: 1620.98, 1: 1210.42}, 'COFINS_Valor': {0: 7466.32, 1: 5575.28}, 'Valor_IPI': {0: 3628.22, 1: 2709.28}, 
                  'Valor_ICMS': {0: 13396.5, 1: 10003.5}, 
                  'Valor_Total_Nota': {0: 201337.5, 1: 201337.5}, 'Valor_Frete': {0: '', 1: ''}})

# 创建Excel写入对象,指定xlsxwriter引擎
writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
df.to_excel(writer, index=False, freeze_panes=(1,0))

# 获取工作簿和工作表对象
workbook = writer.book
worksheet = writer.sheets['Sheet1']

# 定义巴西雷亚尔货币格式
brl_format = workbook.add_format({'num_format': 'R$ #,##0.00'})

# 遍历所有列,设置float64列的格式
for col_num, col_name in enumerate(df.columns):
    if df[col_name].dtype == 'float64':
        # 同时设置列宽优化显示(可选)
        worksheet.set_column(col_num, col_num, 18, brl_format)

# 保存文件
writer.close()

3. 备选方案:转成BRL格式字符串再导出

如果不需要保留数值的可计算性,只需要展示为固定格式的字符串,可以先将float列转为R$ XXXX.XX格式的字符串,再导出Excel:

示例代码:

# 遍历列,转换float64列为BRL格式字符串
for col in df.columns:
    if df[col].dtype == 'float64':
        # 处理千分位和小数点的巴西格式(逗号做小数点,点做千分位)
        df[col] = df[col].apply(lambda x: f'R$ {x:,.2f}'.replace(',', 'temp').replace('.', ',').replace('temp', '.'))

# 导出Excel
df.to_excel('output.xlsx', index=False, freeze_panes=(1,0))

注意:这种方式会把数值转为字符串,Excel中无法直接进行计算,仅适合纯展示场景。

内容的提问来源于stack exchange,提问作者Lucas Marques

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:05:30