如何利用 pandas 批量合并 Excel?

本文介绍了如何使用Pandas将多个dataframe保存到同一个Excel文件的不同sheet中,通过创建ExcelWriter对象并逐个写入dataframe。示例代码展示了如何读取指定目录下的所有Excel和CSV文件,自动合并到一个Excel文件,sheet名对应文件名。这个方法简化了大量数据文件的整合工作。

今天分享一个利用Pandas进行数据分析的小技巧,也是之前有粉丝在后台进行提问的,即如何将多个pandas.dataframe保存到同一个Excel中。

其实只需要灵活使用pandas中的pd.ExcelWriter()方法即可。

假设现在我们有df1 df2 df3三个dataframe,需要将它们保存到同一个Excel的不同sheet中,只需要先创建一个ExcelWriter对象,然后不停写入就行

df1 = pd.read_csv('东京奥运会奖牌数据.csv')
df2 = pd.read_excel("TOP250.xlsx")
df3 = pd.read_excel("2020年中国大学排名.xlsx")

writer = pd.ExcelWriter('test.xlsx')
df1.to_excel(writer,sheet_name="df1",index=False)
df2.to_excel(writer,sheet_name="df2",index=False)
df3.to_excel(writer,sheet_name="df3",index=False)
writer.save()

是不是和常见的文件读写with方法类似,我们也可以使用同样的方法

with pd.ExcelWriter("test1.xlsx") as xlsxwriter:
    df1.to_excel(xlsxwriter,sheet_name="df1",index=False)
    df2.to_excel(xlsxwriter,sheet_name="df2",index=False)
    df3.to_excel(xlsxwriter,sheet_name="df3",index=False)

得到的结果是一样的,可以将多个df保存到一个Excel中
8f8b8ef0a03786a508a6bb51cf65884e.png

这个方法虽然简单好用,但是如果要保存的 df 太多了,一个一个手动去读取再手动去保存就显得十分麻烦,另外我们希望sheet是文件名,如果手动复制粘贴,就更麻烦了。

我们先简单拿来一个小脚本「获取指定目录下的全部Excel文件名」

import os
def getfile(dirpath):
    
    filelist = []
    for root,dirs,files in os.walk(dirpath):
        for file in files:
            if file.endswith("xlsx") or file.endswith("csv"):
                filelist.append(os.path.join(root,file)) 
    
    return filelist

执行一下,可以看到指定目录下的全部Excel文件名
1baa61a024b873e92c5d1d58bedbb670.png

下面要做的,我想不用多说了「循环读取,自动保存」

filelist = getfile('/Users/liuzaoqi/Desktop/zaoqi/2022公众号文章/如何保存多个df')
writer = pd.ExcelWriter('test.xlsx')
for file in filelist:
    if file.endswith("xlsx"):
        df = pd.read_excel(file)
    else:
        df = pd.read_csv(file)
    df.to_excel(writer,sheet_name=file.split('/')[-1].split('.')[0],index=False)
writer.save()

现在,当前目录下的全部Excel就自动合并到一个Excel中的不同sheet中,并且sheet名是对应的文件名
97cff65bb6dbdb8812527be6a425624f.png

来源:早起python

### 如何使用 Pandas 批量读取 Excel 文件 为了批量处理多个 Excel 文件,可以利用 `pandas` 库中的功能来简化这一过程。下面是一个具体的实现方法: 首先,确保安装了必要的库: ```bash pip install pandas openpyxl ``` 接着,在 Python 脚本中导入所需的模块并定义函数用于遍历目录下的所有 Excel 文件,并将其加载到 DataFrame 中。 #### 定义批量读取函数 ```python import os import pandas as pd def load_excel_files(directory_path): """ 该函数接收一个包含 Excel 文件的文件夹路径, 返回由这些文件组成的单个 DataFrame。 参数: directory_path (str): 存储 Excel 文件的目标文件夹 返回: combined_df (pd.DataFrame): 合并后的数据框 """ all_dataframes = [] # 创建列表存储各个工作表的数据帧对象 for filename in os.listdir(directory_path): if not filename.endswith('.xlsx') or filename.startswith('~$'): continue file_path = os.path.join(directory_path, filename) try: excel_file = pd.read_excel(file_path) # 尝试读取当前文件 # 添加一列表示原始文件名以便追踪来源 excel_file['source'] = filename all_dataframes.append(excel_file) except Exception as e: print(f"无法读取 {filename}: {e}") # 如果有至少两个以上的DataFrame,则进行合并操作;否则返回单一DataFrame或空DataFrame if len(all_dataframes) > 1: combined_df = pd.concat(all_dataframes, ignore_index=True) elif len(all_dataframes) == 1: combined_df = all_dataframes[0] else: combined_df = pd.DataFrame() return combined_df ``` 此代码片段展示了如何通过循环访问指定目录内的每一个 `.xlsx` 文件,并尝试使用 `pandas.read_excel()` 函数逐一打开它们[^1]。对于成功读入的工作簿,会为其添加一个新的字段记录其源文件名称,最后将所有的表格纵向堆叠成一个完整的 DataFrame 对象返回给调用者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值