python 按照sheet合并多个Excel的示例代码(多个sheet)

  • Post category:Python

让我来详细讲解一下“python按照sheet合并多个Excel的示例代码(多个sheet)”的完整实例教程。

1. 准备工作

在开始之前,我们需要安装两个 python 包:

  1. pandas
  2. xlrd

可以通过下面的命令进行安装:

pip install pandas xlrd

在安装完成之后,我们需要准备三个 Excel 文件,并且每个文件都包含多个 sheet。

2. 读取 Excel 文件

首先,我们需要使用 pandas 来读取 Excel 文件。因为每个 Excel 文件都包含多个 sheet,所以我们需要对每个 sheet 进行读取,并把它们存储在一个字典中。

import pandas as pd

# 定义要读取的 Excel 文件名
filenames = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']

# 定义要读取的 sheet 名称
sheetnames = ['Sheet1', 'Sheet2', 'Sheet3']

dfs = {}  # 存储每个 sheet 的 DataFrame

# 遍历每个文件和每个 sheet,将它们的内容存储在字典中
for i in range(len(filenames)):
    file = filenames[i]
    sheets = {}
    for j in range(len(sheetnames)):
        sheet = sheetnames[j]
        df = pd.read_excel(file, sheet_name=sheet)
        sheets[sheet] = df
    dfs[file] = sheets

在上述代码中,我们定义了一个名为 dfs 的字典来存储每个 sheet 的 DataFrame。我们遍历每个文件和每个 sheet,并将每个 sheet 的 DataFrame 存储在一个名为 sheets 的字典中。最后,我们将每个文件的 sheets 字典存储在 dfs 字典中。

3. 合并 sheet

接下来,我们要将所有的 sheet 合并到一起。我们需要使用 pandas 中的 concat 函数来将一个字典中的多个 DataFrame 合并到一起。

merged = pd.DataFrame()

for file in dfs:
    sheets = dfs[file]
    for sheet in sheets:
        df = sheets[sheet]
        df['fileName'] = file  # 在每个 DataFrame 中添加一个列,用于标识文件名
        df['sheetName'] = sheet  # 在每个 DataFrame 中添加一个列,用于标识 sheet 名称
        merged = pd.concat([merged, df], ignore_index=True)

在上述代码中,我们遍历每个文件的每个 sheet,并将它们的 DataFrame 合并到一个名为 merged 的 DataFrame 中。我们在两个 DataFrame 中分别添加了一个新的列,用于标识文件名和 sheet 名称。

4. 输出合并结果

最后,我们要将合并的结果输出到一个 Excel 文件中。我们可以使用 pandas 中的 to_excel 函数来实现。

merged.to_excel('merged.xlsx', index=False)

在上述代码中,我们将 DataFrame 内容输出到名为 merged.xlsx 的 Excel 文件中,并将 Excel 文件的索引设置为 False,以避免在 Excel 文件中出现不必要的列。

至此,我们就完成了“python按照sheet合并多个Excel的示例代码(多个sheet)”的完整实例教程。

示例说明

下面给出两个示例说明:

示例一

假设我们有三个 Excel 文件:file1.xlsxfile2.xlsxfile3.xlsx,每个文件都包含两个 sheet:Sheet1Sheet2

运行上述代码后,我们会得到一个名为 merged.xlsx 的 Excel 文件,它包含了所有 sheet 的内容。在这个 Excel 文件中,每一行的最后两列分别是该行所属的文件名和 sheet 名称。

示例二

现在假设我们希望合并的 sheet 只包含特定列,如Sheet1 中的 IDName 列以及 Sheet2 中的 Salary 列。

我们可以在 DataFrame 进行合并之前使用 .loc 方法来筛选要保留的列:

merged = pd.DataFrame()

for file in dfs:
    sheets = dfs[file]
    for sheet in sheets:
        df = sheets[sheet]
        if sheet == 'Sheet1':
            df = df.loc[:, ['ID', 'Name']]
        elif sheet == 'Sheet2':
            df = df.loc[:, ['Salary']]
        df['fileName'] = file
        df['sheetName'] = sheet
        merged = pd.concat([merged, df], ignore_index=True)

在上述代码中,我们对 Sheet1Sheet2 的 DataFrame 分别使用 .loc 筛选出需要保留的列,并将结果存储在一个新的 DataFrame 中。然后,我们将新的 DataFrame 合并到名为 merged 的 DataFrame 中。在每个新的 DataFrame 中,我们还添加了一个列,用于标识文件名和 sheet 名称。

这样,我们就可以得到一个只包含特定列的合并结果了。