让我来详细讲解一下“python按照sheet合并多个Excel的示例代码(多个sheet)”的完整实例教程。
1. 准备工作
在开始之前,我们需要安装两个 python 包:
- pandas
- 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.xlsx
,file2.xlsx
,file3.xlsx
,每个文件都包含两个 sheet:Sheet1
和 Sheet2
。
运行上述代码后,我们会得到一个名为 merged.xlsx
的 Excel 文件,它包含了所有 sheet 的内容。在这个 Excel 文件中,每一行的最后两列分别是该行所属的文件名和 sheet 名称。
示例二
现在假设我们希望合并的 sheet 只包含特定列,如Sheet1
中的 ID
和 Name
列以及 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)
在上述代码中,我们对 Sheet1
和 Sheet2
的 DataFrame 分别使用 .loc
筛选出需要保留的列,并将结果存储在一个新的 DataFrame 中。然后,我们将新的 DataFrame 合并到名为 merged
的 DataFrame 中。在每个新的 DataFrame 中,我们还添加了一个列,用于标识文件名和 sheet 名称。
这样,我们就可以得到一个只包含特定列的合并结果了。