如何用Pandas read_excel保留货币与百分比的单元格格式信息
读取Excel单元格显示值到DataFrame的解决方案
核心问题在于Pandas的read_excel默认读取的是单元格的底层数值,而非格式化后的显示文本。要捕获带$、%等符号的显示内容,需要直接读取单元格的显示值,以下是几种可行方案:
方案1:用openpyxl直接提取显示文本
openpyxl的单元格对象提供display_value属性,能直接获取单元格格式化后的显示内容,无需依赖Excel客户端,跨平台可用。
import openpyxl import pandas as pd import os # 替换为你的Excel文件目录 file_dir = "path/to/your/excel/files" all_records = [] for filename in os.listdir(file_dir): if not filename.endswith(".xlsx"): continue file_path = os.path.join(file_dir, filename) # data_only=False必须设置,否则会忽略格式只取计算后的值 wb = openpyxl.load_workbook(file_path, data_only=False) ws = wb.active # 提取表头 headers = [cell.display_value for cell in ws[1]] # 提取数据行 for row in ws.iter_rows(min_row=2): row_content = [cell.display_value for cell in row] all_records.append(row_content) # 合并为DataFrame merged_df = pd.DataFrame(all_records, columns=headers)
方案2:用xlwings读取显示值
xlwings直接和本地Excel交互,能精准获取单元格的显示内容,适合有Excel客户端的Windows/macOS环境,代码更简洁直观。
import xlwings as xw import pandas as pd import os file_dir = "path/to/your/excel/files" all_records = [] # visible=False让Excel在后台运行,不弹出界面 with xw.App(visible=False) as app: for filename in os.listdir(file_dir): if not filename.endswith((".xlsx", ".xls")): continue file_path = os.path.join(file_dir, filename) wb = xw.Book(file_path) ws = wb.sheets[0] # 一次性获取整个工作表的显示值,自动转成二维列表 sheet_data = ws.range("A1").expand().value headers = sheet_data[0] data_rows = sheet_data[1:] all_records.extend(data_rows) merged_df = pd.DataFrame(all_records, columns=headers)
方案3:延续unoconv转换方案
如果是无Excel客户端的Linux服务器环境,unoconv将Excel转成CSV/ODS格式是可行的——转换后的文件会保留格式化后的显示文本,再用Pandas读取即可:
# 单个文件转换 unoconv -f csv your_excel_file.xlsx # 批量转换(可结合shell循环) for file in *.xlsx; do unoconv -f csv "$file"; done
转换完成后用Pandas读取CSV:
import pandas as pd import os file_dir = "path/to/converted/csv/files" all_dfs = [] for filename in os.listdir(file_dir): if filename.endswith(".csv"): df = pd.read_csv(os.path.join(file_dir, filename)) all_dfs.append(df) merged_df = pd.concat(all_dfs, ignore_index=True)
内容的提问来源于stack exchange,提问作者EA Bubnoff
相关产品推荐
相关产品推荐

