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

如何强制将带百分号的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:01:23