Python读取XLSX指定工作表:将Target列按字符串格式读取
解决Excel读取时保留Target列百分比格式并统一加%的方案
问题核心
Pandas的read_excel默认会将Excel的百分比格式单元格转成浮点数(比如10.75%转为0.1075),且dtype=str参数无法获取Excel界面显示的原始字符串——因为它是基于单元格存储值转换的。要保留显示的原始格式,需要读取单元格的显示文本而非存储值。
方案一:用openpyxl读取显示文本(最稳妥)
直接读取Excel单元格在界面上显示的内容,确保拿到10.75%或10这类原始字符串,再统一处理Target列。
- 先安装依赖:
pip install openpyxl pandas
- 代码实现:
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
相关产品推荐
相关产品推荐

