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

Python读取XLSX指定工作表:将Target列按字符串格式读取

解决Excel读取时保留Target列百分比格式并统一加%的方案

问题核心

Pandas的read_excel默认会将Excel的百分比格式单元格转成浮点数(比如10.75%转为0.1075),且dtype=str参数无法获取Excel界面显示的原始字符串——因为它是基于单元格存储值转换的。要保留显示的原始格式,需要读取单元格的显示文本而非存储值。


方案一:用openpyxl读取显示文本(最稳妥)

直接读取Excel单元格在界面上显示的内容,确保拿到10.75%或10这类原始字符串,再统一处理Target列。

  1. 先安装依赖:
pip install openpyxl pandas
  1. 代码实现:
import pandas as pd
from openpyxl import load_workbook

# 加载Excel文件,data_only=False确保读取显示值而非存储值
wb = load_workbook("你的文件路径.xlsx", data_only=False)
# 获取工作表2:可以用名称或索引(索引从0开始,工作表2对应索引1)
ws = wb["工作表2"]  # 替换为你的工作表名称,或者用wb.worksheets[1]

# 遍历所有行,提取每个单元格的显示文本
data = []
for row in ws.iter_rows(values_only=False):
    row_content = [cell.display_value for cell in row]
    data.append(row_content)

# 转换为DataFrame,第一行作为表头
df = pd.DataFrame(data[1:], columns=data[0])

# 统一处理Target列:给不含%的内容添加%
df["Target"] = df["Target"].apply(lambda x: x if "%" in str(x) else f"{x}%")

# 验证结果
print(df["Target"])

方案二:用Pandas的converters自定义转换(适合已知存储规则的场景)

如果明确知道Excel中不带%的单元格存储的是百分比数值(比如10代表10%),可以用converters参数自定义转换逻辑:

import pandas as pd

def process_target(value):
    # 处理浮点数:百分比格式的存储值是小数(如10.75%→0.1075),常规格式是整数/小数(如10→10.0)
    if isinstance(value, float):
        # 小数转百分比字符串,整数保留原数加%
        if value < 1:
            return f"{value * 100:.2f}%"
        else:
            return f"{int(value)}%" if value.is_integer() else f"{value}%"
    # 处理字符串(特殊情况)
    else:
        return value if "%" in value else f"{value}%"

# 读取工作表2,用converters指定Target列的转换函数
df = pd.read_excel("你的文件路径.xlsx", sheet_name="工作表2", converters={"Target": process_target})

print(df["Target"])

为什么之前的方法无效?

  • read_excel默认按单元格的存储值解析,百分比格式的存储值是小数,所以转成float;
  • dtype=str只是将解析后的float转成字符串(比如0.1075→"0.1075"),无法获取Excel显示的"10.75%";
  • read_csv本身不支持读取Excel的工作表,自然无法解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:55:23