下面就为您详细讲解“Python在不同场景合并多个Excel的方法”的完整实例教程。
一、准备工作
在进行合并多个Excel的操作之前,我们需要准备以下工作:
- 安装必要的Python库
Python中常用于处理Excel的库有 pandas
和 openpyxl
,我们通过 pip
工具安装这两个库,命令如下:
pip install pandas openpyxl
- 准备待合并的Excel文件
在本例中,我们准备了 3 个待合并的Excel文件,分别命名为 data1.xlsx
、data2.xlsx
和 data3.xlsx
。
二、代码实现
在准备工作完成后,我们就可以开始编写合并多个Excel的Python代码了。
import pandas as pd
# 读取待合并的Excel文件
df1 = pd.read_excel('data1.xlsx')
df2 = pd.read_excel('data2.xlsx')
df3 = pd.read_excel('data3.xlsx')
# 合并三个Excel文件
df = pd.concat([df1, df2, df3])
# 将合并结果保存到新的Excel文件中
df.to_excel('merged_data.xlsx', index=False)
代码解释:
-
首先使用
pandas
库的read_excel()
函数读取待合并的Excel文件,将所有数据保存到DataFrame
类型的变量df1
、df2
和df3
中。 -
使用
pd.concat()
函数将三个DataFrame
类型的变量合并为一个新的DataFrame
变量df
。 -
使用
df.to_excel()
函数将合并后的数据保存到一个新的Excel文件中,参数index=False
表示不保存行索引。
三、示例说明
示例一:合并相同结构的多个Excel文件
假设我们有几个结构相同的Excel文件,都包含两列数据:学生姓名和成绩。我们想将这些Excel文件合并为一个文件,方便进行分析和排序。
我们可以按照以下步骤进行操作:
-
将所有Excel文件放在同一个文件夹中,方便进行批量处理。
-
使用
os
库的listdir()
函数获取文件夹中所有Excel文件的文件名,然后使用循环遍历每个文件名。 -
对于每个文件名,使用执行上面的 Python 代码实现合并操作。
示例代码如下:
import os
folder_path = '/path/to/folder/' # 文件夹路径
output_file = 'merged_data.xlsx' # 合并结果输出文件名
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]
df_list = []
for file_name in excel_files:
file_path = os.path.join(folder_path, file_name)
df = pd.read_excel(file_path)
df_list.append(df)
merged_df = pd.concat(df_list)
merged_df.to_excel(output_file, index=False)
注意事项:
-
在示例代码中,我们使用了绝对路径
/path/to/folder/
,实际使用时应将其修改为正确的文件夹路径。 -
listdir()
函数会返回文件夹中的所有文件,所以需要添加if f.endswith('.xlsx')
过滤掉非Excel文件。
示例二:合并不同结构的多个Excel文件
假设我们有几个结构不同的Excel文件,其中每个文件包含的列数和列名都不同。我们需要将这些Excel文件合并为一个文件,方便进行全面的分析。
我们可以按照以下步骤进行操作:
-
读取每个Excel文件时,使用
usecols
参数指定需要读取的列。 -
将所有
DataFrame
类型的变量添加到一个列表中,然后使用pd.concat()
函数将它们合并为一个新的DataFrame
变量。 -
在合并完成后,我们可以使用
fillna()
函数填充空白单元格。
示例代码如下:
# 文件名和列名列表
file_columns = [
{'file_name': 'data1.xlsx', 'columns': ['Name', 'Age']},
{'file_name': 'data2.xlsx', 'columns': ['Name', 'Country', 'City']},
{'file_name': 'data3.xlsx', 'columns': ['Name', 'City', 'Age']},
]
df_list = []
for fc in file_columns:
df = pd.read_excel(fc['file_name'], usecols=fc['columns'])
df_list.append(df)
merged_df = pd.concat(df_list)
merged_df.fillna('', inplace=True)
merged_df.to_excel('merged_data.xlsx', index=False)
注意事项:
-
在实际使用时,文件名和列名列表应根据实际情况进行修改。
-
在合并不同结构的Excel文件时,由于列名不同可能存在空单元格,需要使用
fillna()
函数填充。