使用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
相关产品推荐
相关产品推荐

