如何强制将带百分号的Pandas样式写入Excel文件?
问题:DataFrame添加百分号样式后写入Excel,百分号消失如何解决?
我有如下DataFrame:
Server CPU_Usage Memory Usage Prod1 80 30 Prod2 70 10 Prod3 20 12
需求是为CPU_Usage和Memory_Usage列添加百分号格式,显示为80%、30%等。尝试使用以下代码设置样式:
df_style = df.style.format({'CPU_Usage':'{:}%', 'Memory_Usage':'{:}%'})
该样式在Jupyter Notebook中可正常显示带百分号的效果,但使用df_style.to_excel(r'report.xlsx', engine='openpyxl')写入Excel文件后,百分号消失。请问如何强制让Excel文件中保留这两列的百分号?
解决方案1:转成带百分号的字符串(直接存文本)
如果不需要这些值在Excel里做计算,只是要显示带百分号的文本,直接把数值列转成字符串加百分号就行:
# 复制原数据避免改动原始DataFrame df_formatted = df.copy() # 给目标列加百分号并转成字符串 df_formatted['CPU_Usage'] = df_formatted['CPU_Usage'].astype(str) + '%' df_formatted['Memory Usage'] = df_formatted['Memory Usage'].astype(str) + '%' # 写入Excel,关闭索引避免多余列 df_formatted.to_excel(r'report.xlsx', engine='openpyxl', index=False)
解决方案2:设置Excel单元格数字格式(保留数值可计算性)
如果需要保留数值的计算属性,同时显示百分号,得直接操作Excel的单元格格式。注意Excel的百分号格式是基于小数的(比如0.8对应80%),所以要先把整数转成小数,再设置格式:
import pandas as pd from openpyxl import load_workbook # 先处理数据:把整数百分比转成小数 df_num = df.copy() df_num['CPU_Usage'] = df_num['CPU_Usage'] / 100 df_num['Memory Usage'] = df_num['Memory Usage'] / 100 # 写入处理后的数据到Excel df_num.to_excel(r'report.xlsx', engine='openpyxl', index=False) # 加载Excel文件设置格式 wb = load_workbook(r'report.xlsx') ws = wb.active # 目标列是B(CPU_Usage)和C(Memory Usage),跳过表头行 for col_letter in ['B', 'C']: for cell in ws[col_letter]: if cell.row == 1: continue # 设置数字格式为显示整数百分号 cell.number_format = '0%' # 保存修改后的文件 wb.save(r'report.xlsx')
为什么原来的方法不行?
df.style.format()只是给Jupyter的HTML渲染加了显示样式,既没修改数据本身,也不会把这个样式同步到Excel的单元格格式里,所以写入Excel后百分号就没了。必须通过修改数据或者直接操作Excel格式来实现需求。
内容的提问来源于stack exchange,提问作者user1471980
相关产品推荐
相关产品推荐

