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

如何让pandas.read_excel读取带%的原始百分比字符串而非转数值?

如何用Pandas读取Excel中带百分号的原始百分比值

这个问题我之前也碰到过,其实核心原因是:Excel里的百分比单元格本质是数值+显示格式(比如"50%"对应的底层数值是0.5,只是设置了百分比显示格式)。Pandas默认读取的是底层数值,而converter参数只是对读取后的数值做类型转换,所以自然拿不到带百分号的原始显示文本。

给你两个实用的解决方案,根据你的需求选就行:

方案一:直接读取Excel单元格的显示文本(完全还原原始格式)

这个方法适合你需要精准还原Excel中显示的带百分号字符串的场景(比如有的单元格是"50%",有的是"33.3%",格式不统一时)。我们可以用openpyxl直接读取单元格的display_value属性,它会返回单元格显示的文本内容,而不是底层数值。

示例代码:

import openpyxl
import pandas as pd

# 替换成你的Excel文件路径和工作表名
wb = openpyxl.load_workbook('your_data.xlsx')
ws = wb['Sheet1']

# 假设目标百分比列是第2列(B列,索引从1开始),你可以根据实际调整
target_col = 2
# 读取该列所有单元格的显示文本
percent_list = [cell.display_value for cell in ws.iter_cols(min_col=target_col, max_col=target_col, values_only=False)][0]

# 去掉表头(如果你的表格有表头的话)
percent_list = percent_list[1:]

# 转换成DataFrame,或者和其他列数据合并
df = pd.DataFrame({'原始百分比': percent_list})

注意:要确保已经安装了openpyxl,可以用pip install openpyxl安装。

方案二:读取数值后手动转换为带百分号的字符串

如果你的需求只是把读取到的浮点数转换成带百分号的格式,不需要完全还原Excel的显示细节,这个方法更简洁。我们可以把读取到的浮点数乘以100,再拼接百分号,还能自定义小数位数。

示例代码:

import pandas as pd

# 正常读取Excel,得到浮点数格式的百分比数值
df = pd.read_excel('your_data.xlsx')
# 替换成你的百分比列名
percent_col = '增长率'

# 转换为带百分号的字符串,这里保留0位小数,需要的话可以改成:.1f保留一位
df[percent_col] = df[percent_col].apply(lambda x: f"{x * 100:.0f}%")

比如读取到的0.5会变成"50%",0.3333会变成"33%"(如果设置.0f)或者"33.33%"(如果设置.2f)。

补充说明

如果你的Excel单元格是文本格式输入的"50%"(也就是先设置单元格为文本格式,再输入内容),那直接用converter={col_name: str}应该就能读到原始的"50%"。但你说用了converter得到的是'0.5',说明你的单元格是数值+百分比格式,不是纯文本格式,所以上面的两个方案更适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:05:09