Python在不同场景合并多个Excel的方法

  • Post category:Python

下面就为您详细讲解“Python在不同场景合并多个Excel的方法”的完整实例教程。

一、准备工作

在进行合并多个Excel的操作之前,我们需要准备以下工作:

  1. 安装必要的Python库

Python中常用于处理Excel的库有 pandasopenpyxl,我们通过 pip 工具安装这两个库,命令如下:

pip install pandas openpyxl
  1. 准备待合并的Excel文件

在本例中,我们准备了 3 个待合并的Excel文件,分别命名为 data1.xlsxdata2.xlsxdata3.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)

代码解释:

  1. 首先使用 pandas 库的 read_excel() 函数读取待合并的Excel文件,将所有数据保存到 DataFrame 类型的变量 df1df2df3 中。

  2. 使用 pd.concat() 函数将三个 DataFrame 类型的变量合并为一个新的 DataFrame 变量 df

  3. 使用 df.to_excel() 函数将合并后的数据保存到一个新的Excel文件中,参数 index=False 表示不保存行索引。

三、示例说明

示例一:合并相同结构的多个Excel文件

假设我们有几个结构相同的Excel文件,都包含两列数据:学生姓名和成绩。我们想将这些Excel文件合并为一个文件,方便进行分析和排序。

我们可以按照以下步骤进行操作:

  1. 将所有Excel文件放在同一个文件夹中,方便进行批量处理。

  2. 使用 os 库的 listdir() 函数获取文件夹中所有Excel文件的文件名,然后使用循环遍历每个文件名。

  3. 对于每个文件名,使用执行上面的 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)

注意事项:

  1. 在示例代码中,我们使用了绝对路径 /path/to/folder/,实际使用时应将其修改为正确的文件夹路径。

  2. listdir() 函数会返回文件夹中的所有文件,所以需要添加 if f.endswith('.xlsx') 过滤掉非Excel文件。

示例二:合并不同结构的多个Excel文件

假设我们有几个结构不同的Excel文件,其中每个文件包含的列数和列名都不同。我们需要将这些Excel文件合并为一个文件,方便进行全面的分析。

我们可以按照以下步骤进行操作:

  1. 读取每个Excel文件时,使用 usecols 参数指定需要读取的列。

  2. 将所有 DataFrame 类型的变量添加到一个列表中,然后使用 pd.concat() 函数将它们合并为一个新的 DataFrame 变量。

  3. 在合并完成后,我们可以使用 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)

注意事项:

  1. 在实际使用时,文件名和列名列表应根据实际情况进行修改。

  2. 在合并不同结构的Excel文件时,由于列名不同可能存在空单元格,需要使用 fillna() 函数填充。