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

Palantir PySpark仓库中Pandas导出Excel小数分隔符转换问题

解决Pandas写入Excel时用逗号作为小数分隔符且识别为数字的问题

以下两种方案可以在不修改Excel区域设置的前提下,让Excel将带逗号分隔符的数值识别为数字:

方案1:使用xlsxwriter引擎写入时直接设置格式

这个方法无需事后修改文件,在写入DataFrame的同时配置单元格格式:

import pandas as pd

output_file = "output.xlsx"

with pd.ExcelWriter(output_file, engine="xlsxwriter") as writer:
    df.to_excel(writer, sheet_name="Sheet1", index=False)
    
    # 获取工作簿和工作表实例
    workbook = writer.book
    worksheet = writer.sheets["Sheet1"]
    
    # 创建适配逗号小数分隔的数字格式
    num_format = workbook.add_format({"num_format": "#,##0.00"})
    
    # 筛选所有浮点类型的列
    float_cols = df.select_dtypes(include=["float64", "float32"]).columns
    
    # 为每个浮点列设置格式
    for col_name in float_cols:
        col_idx = df.columns.get_loc(col_name)
        worksheet.set_column(col_idx, col_idx, None, num_format)

方案2:使用openpyxl引擎写入后修改格式

如果环境中默认使用openpyxl,可以用这个方法:

import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter

output_file = "output.xlsx"

# 先写入DataFrame
with pd.ExcelWriter(output_file, engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="Sheet1", index=False)

# 加载工作簿修改格式
wb = load_workbook(output_file)
ws = wb["Sheet1"]

float_cols = df.select_dtypes(include=["float64", "float32"]).columns

for col_name in float_cols:
    col_index = df.columns.get_loc(col_name) + 1
    col_letter = get_column_letter(col_index)
    
    # 跳过表头,设置单元格格式
    for cell in ws[col_letter]:
        if cell.row == 1:
            continue
        cell.number_format = "#,##0.00"

wb.save(output_file)

为什么之前的方法无效

  • 转字符串替换点为逗号:字符串类型会被Excel识别为文本,即使内容看起来像数字,因此会出现绿色错误三角。
  • 使用float_format参数:该参数仅控制Python层面的数值格式化输出,仍然以点作为小数分隔符,无法适配Excel的区域格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:13:18