如何使用pd.read_excel()读取大Excel文件为单个DataFrame及动态方案
读取多工作表大Excel文件为单个DataFrame的方案
一、用pd.read_excel()合并多工作表为单个DataFrame
你可以按以下步骤实现:
- 先获取Excel文件的所有工作表名称
- 遍历读取每个工作表的数据
- 合并所有读取到的DataFrame
示例代码:
import pandas as pd # 替换为你的Excel文件路径 file_path = "your_file.xlsx" # 加载Excel文件并获取所有工作表名 xls = pd.ExcelFile(file_path) sheet_names = xls.sheet_names # 存储每个工作表的DataFrame dfs_list = [] for sheet in sheet_names: # 读取单个工作表 sheet_df = pd.read_excel(xls, sheet_name=sheet) dfs_list.append(sheet_df) # 合并所有DataFrame,ignore_index重置索引 combined_df = pd.concat(dfs_list, ignore_index=True)
如果各工作表列结构不一致,可通过concat的join参数调整:
- 用
join='outer'保留所有列(默认行为) - 用
join='inner'只保留所有工作表共有的列
二、应对行数增长的动态解决方案
针对未来文件行数持续增加的场景,可采用以下方案避免内存溢出并提升效率:
1. 分块读取
使用chunksize参数将每个工作表分块读取,逐块存入列表后合并,适合超大型文件:
dfs_list = [] for sheet in sheet_names: # 按10000行/块读取,可根据内存情况调整数值 for chunk in pd.read_excel(xls, sheet_name=sheet, chunksize=10000): dfs_list.append(chunk) combined_df = pd.concat(dfs_list, ignore_index=True)
2. 优化数据类型
读取时指定列的dtype,减少内存占用:
- 对于重复值较多的字符串列,指定为
category类型 - 对于数值列,用更小的数值类型(如
int32/float32代替默认的int64/float64)
示例:
sheet_df = pd.read_excel( xls, sheet_name=sheet, dtype={ "分类列": "category", "计数列": "int32", "百分比列": "float32" } )
3. 按需读取列
如果不需要所有列,用usecols参数指定目标列,减少加载的数据量:
sheet_df = pd.read_excel(xls, sheet_name=sheet, usecols=["用户ID", "订单金额", "下单时间"])
内容的提问来源于stack exchange,提问作者vineet singh
相关产品推荐
相关产品推荐

