基于Python读取多个excel竖向拼接为一个excel的实现方法
作者:袁袁袁袁满
在Python中,可以使用pandas库结合glob模块来遍历读取多个Excel文件,并将它们竖向拼接为一个DataFrame对象,以下是完整的实现方法,需要的朋友可以参考下
在Python中,可以使用pandas
库结合glob
模块来遍历读取多个Excel文件,并将它们竖向拼接为一个DataFrame对象。以下是完整的实现方法:
方法1:使用glob匹配文件 + pd.concat()
import pandas as pd import glob # 1. 获取所有Excel文件路径(支持.xlsx和.xls) excel_files = glob.glob('*.xlsx') + glob.glob('*.xls') # 当前目录下所有Excel文件 # 或者指定路径:glob.glob('/path/to/files/*.xlsx') # 2. 读取并拼接所有Excel文件 dfs = [] for file in excel_files: df = pd.read_excel(file) # 可以添加参数如sheet_name='Sheet1' dfs.append(df) # 3. 竖向拼接所有DataFrame result = pd.concat(dfs, ignore_index=True) # 4. 查看结果 print(result) # 保存为一个xlsx result.to_excel('汇总.xlsx')
方法2:使用列表推导式(更简洁)
import pandas as pd import glob # 读取并拼接所有Excel文件 result = pd.concat([ pd.read_excel(f) for f in glob.glob('*.xlsx') + glob.glob('*.xls') ], ignore_index=True) print(result) # 保存为一个xlsx result.to_excel('汇总.xlsx')
方法3:处理多个Sheet的情况
如果需要读取每个Excel文件的多个Sheet:
import pandas as pd import glob dfs = [] for file in glob.glob('*.xlsx'): # 获取所有Sheet名称 sheets = pd.ExcelFile(file).sheet_names for sheet in sheets: df = pd.read_excel(file, sheet_name=sheet) dfs.append(df) result = pd.concat(dfs, ignore_index=True) # 保存为一个xlsx result.to_excel('汇总.xlsx')
高级用法:添加文件来源列
如果需要知道每行数据来自哪个文件:
dfs = [] for file in glob.glob('*.xlsx'): df = pd.read_excel(file) df['source_file'] = file # 添加来源文件列 dfs.append(df) result = pd.concat(dfs, ignore_index=True) # 保存为一个xlsx result.to_excel('汇总.xlsx')
注意事项
- 内存管理:如果文件很大或很多,建议分批处理或使用
chunksize
参数 - 列一致性:确保所有Excel文件的列结构相同,否则拼接后会出现很多NaN值
- 性能优化:对于大量文件,可以使用
tqdm
显示进度条:
from tqdm import tqdm dfs = [] for file in tqdm(glob.glob('*.xlsx')): dfs.append(pd.read_excel(file)) result = pd.concat(dfs, ignore_index=True) # 保存为一个xlsx result.to_excel('汇总.xlsx')
- 异常处理:添加try-except块处理损坏的文件
dfs = [] for file in glob.glob('*.xlsx'): try: dfs.append(pd.read_excel(file)) except Exception as e: print(f"Error reading {file}: {str(e)}")
完整示例(推荐)
import pandas as pd import glob def read_and_concat_excels(pattern='*.xlsx', sheet_name=0, add_source=False): """ 读取并拼接多个Excel文件 参数: pattern: 文件匹配模式 (如 'data/*.xlsx') sheet_name: 要读取的Sheet名称或索引 add_source: 是否添加来源文件列 返回: 拼接后的DataFrame """ dfs = [] for file in glob.glob(pattern): try: df = pd.read_excel(file, sheet_name=sheet_name) if add_source: df['source_file'] = file dfs.append(df) except Exception as e: print(f"跳过文件 {file}: {str(e)}") if not dfs: raise ValueError("没有找到可读取的Excel文件") return pd.concat(dfs, ignore_index=True) # 使用示例 combined_df = read_and_concat_excels(pattern='input_files/*.xlsx', add_source=True) combined_df.to_excel('汇总.xlsx', index=False)
这种方法既健壮又灵活,可以处理大多数Excel文件拼接的场景。
到此这篇关于基于Python读取多个excel竖向拼接为一个excel的实现方法的文章就介绍到这了,更多相关Python读取多个excel拼接为一个内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!