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

使用pandas导出dataframe到Excel时如何保留原有点号千位分隔符

解决pandas写入Excel时千位分隔符被自动替换的问题

问题原因

数值列默认以数值类型写入Excel后,Excel会自动套用系统/软件默认的数字格式渲染,导致原本的点号千位分隔符被替换为逗号。你提到的混合格式写入后正常,是因为混合格式会被pandas识别为字符串类型,Excel不会对文本内容做自动格式转换。

解决方案

方案1:保留数值可计算属性,自定义Excel单元格格式

该方案写入的数值仍可在Excel中进行计算,仅修改显示格式,适配你的点号千位分隔符需求,修改后的代码如下:

from openpyxl import load_workbook
import pandas as pd

wb = load_workbook(filename)
sheet=wb[s_name]
writer = pd.ExcelWriter(filename, engine='openpyxl')

pivot_to_excel(wb, filename, prepared_data, s_name, writer)

def pivot_to_excel(book, excelfilename, PivotTable, s_name, writer):
    writer.sheets = {ws.title: ws for ws in book.worksheets}
    for sheetname in writer.sheets:
        if sheetname == s_name:            
            PivotTable.to_excel(writer,sheet_name=sheetname, startrow=writer.sheets[sheetname].max_row, index = False)
            # 新增格式设置逻辑
            target_sheet = writer.sheets[sheetname]
            # 按需修改下方的列号:比如要修改第二列就填2,多列可以写循环处理
            target_col = 3
            # 遍历本次写入的所有数据行,设置格式
            data_start_row = target_sheet.max_row - len(PivotTable) + 1
            for row_num in range(data_start_row, target_sheet.max_row + 1):
                cell = target_sheet.cell(row=row_num, column=target_col)
                # 自定义格式:点为千位分隔符,逗号为小数分隔符,保留2位小数,可按需调整小数位数
                cell.number_format = '#.##0,00'
    writer.save()

方案2:转换为字符串写入,完全保留原有显示

如果不需要在Excel中对该列做数值计算,可以直接在写入前将目标列转为字符串类型:

# 替换为你的实际列名
prepared_data['目标数值列名'] = prepared_data['目标数值列名'].astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:04