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

如何在Python中格式化货币列且保留数值类型而非对象/字符串类型?

解决方法:保留数值类型的同时设置显示格式

不用修改数据框的实际数据类型,只需通过设置pandas的显示规则让列以巴西货币/百分比样式展示,底层数据依然是float64类型,排序、计算完全不受影响。

1. 针对特定列设置显示格式(推荐)

用Styler自定义样式,完全不改动原始数据:

import pandas as pd
import locale

locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')

# 定义巴西雷亚尔格式化函数
def format_brl(x):
    return locale.currency(x, grouping=True)

# 定义百分比格式化函数(注意原始值是小数,比如0.25对应25%)
def format_percent(x):
    return f"{x*100:.2f}%"

# 给指定列套上显示样式,原始数据类型不变
styled_data = filtered_data.style.format({
    'Receita Total': format_brl,
    'Margem Final': format_percent
})

# 直接显示样式化后的表格
styled_data

2. 全局设置(所有浮点列默认货币格式)

如果希望所有float类型列都用巴西货币格式显示,可全局配置:

import pandas as pd
import locale

locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')

def format_currency(x):
    return locale.currency(x, grouping=True)

# 全局生效,所有float列都会按货币格式展示
pd.options.display.float_format = format_currency

3. 验证数据类型

设置完样式后,原始数据的类型依然是float64,完全不影响排序和计算:

print(filtered_data.dtypes)
# 输出示例:
# Receita Total    float64
# Margem Final     float64
# dtype: object

4. 导出带格式的Excel文件

如果要导出到Excel并保留格式,可用Styler直接导出,或者用openpyxl手动配置单元格格式:

# 方法1:用Styler导出
styled_data.to_excel('dados_formatados.xlsx', engine='openpyxl', index=False)

# 方法2:用openpyxl精细控制格式
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import numbers

wb = Workbook()
ws = wb.active

# 写入数据
for row in dataframe_to_rows(filtered_data, index=False, header=True):
    ws.append(row)

# 设置巴西货币格式(假设Receita Total在A列)
for cell in ws['A'][1:]:
    cell.number_format = 'R$ #,##0.00'

# 设置百分比格式(假设Margem Final在B列)
for cell in ws['B'][1:]:
    cell.number_format = '0.00%'

wb.save('dados_formatados.xlsx')

为啥之前的方法不行?

你之前用apply把数值转成了字符串(object类型),数据失去了数值属性,排序时会按字符串的字典序(比如"R$ 100"会排在"R$ 20"前面),而不是数值大小。通过设置显示格式,只是改变了数据的展示方式,底层数值完全保留,排序、计算都正常。

内容的提问来源于stack exchange,提问作者Kamily Santana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:35:04