Python读取多级子目录下多Excel文件并合并为时间序列DataFrame
Python批量读取分层目录Excel并合并为DataFrame方案
依赖准备
需要提前安装以下包:
pandas:核心数据处理库openpyxl:读取.xlsx格式文件的引擎,若你的文件是.xls格式请安装xlrd==1.2.0(更高版本xlrd不再支持xls格式)
安装命令:
pip install pandas openpyxl # 如果是xls文件执行 pip install pandas xlrd==1.2.0
完整实现代码
import pandas as pd from pathlib import Path # 1. 配置参数 ROOT_DIR = Path("./Data") # 你的Data文件夹路径,可修改为绝对路径 EXCEL_SUFFIX = "*.xlsx" # 如果是xls文件改为 "*.xls" # 可选配置:如果Excel有固定表头/需要跳过行,修改这里的read_excel参数 READ_PARAMS = { "header": 0, # 表头所在行,从0开始计数 "engine": "openpyxl" # xls文件改为 "xlrd" } # 2. 递归遍历所有符合条件的Excel文件 all_excel_files = list(ROOT_DIR.rglob(EXCEL_SUFFIX)) df_list = [] for file_path in all_excel_files: # 从路径中提取年份、月份信息,路径结构为 Data/年/月/xxx.xlsx year = file_path.parts[-3] month = file_path.parts[-2] # 读取单个Excel文件 tmp_df = pd.read_excel(file_path, **READ_PARAMS) # 可选:把年、月信息加入DataFrame,方便后续构建时间序列 tmp_df["year"] = int(year) tmp_df["month"] = int(month) # 如果需要生成完整日期,可根据业务逻辑补充,比如加上文件里的日字段 # tmp_df["date"] = pd.to_datetime(tmp_df[["year", "month", "day"]]) df_list.append(tmp_df) # 3. 合并所有数据为单个DataFrame full_df = pd.concat(df_list, ignore_index=True) # 可选:设置时间序列索引 # full_df = full_df.set_index("date") # 验证结果 print(full_df.shape) print(full_df.head())
常见问题处理
- 若所有Excel的列名存在大小写、拼写差异,可在读取后统一对齐列名再合并
- 若文件量极大(超过10万份),可改用生成器模式遍历,避免内存溢出
- 若Excel存在多个工作表,可在
pd.read_excel中指定sheet_name参数读取指定工作表
内容的提问来源于stack exchange,提问作者Arun Kumar Panda
相关产品推荐
相关产品推荐

