Python合并多个Excel数据的方法

  • Post category:Python

下面是关于Python合并多个Excel数据的方法的完整实例教程。

1. 准备工作

首先,我们需要安装pandas库,这是一个数据处理库,可以帮助我们进行数据合并和处理。如果你还没有安装这个库,可以使用以下命令进行安装:

pip install pandas

2. 导入需要合并的Excel数据

我们需要将所有需要合并的Excel数据文件导入Python中。假设我们有两个文件,分别为“data1.xlsx”和“data2.xlsx”,它们的路径分别为“/path/to/data1.xlsx”和“/path/to/data2.xlsx”。我们可以使用以下代码将它们导入Python中:

import pandas as pd

data1 = pd.read_excel("/path/to/data1.xlsx", sheet_name="Sheet1")
data2 = pd.read_excel("/path/to/data2.xlsx", sheet_name="Sheet1")

3. 合并数据

有了需要合并的两个文件后,我们就可以将它们合并为一个文件了。我们可以使用pandas库中的concat方法实现数据合并。如下所示:

merged_data = pd.concat([data1, data2])

这样就可以将data1和data2中的所有数据合并到merged_data中了。

除了concat方法,pandas库中还有其他一些方法可以合并数据,例如merge方法等。但在我们的例子中,concat方法已经足够。

4. 导出合并后的数据

合并数据后,我们需要将它们导出到一个Excel文件中。假设我们将文件导出到“merged_data.xlsx”文件中。我们可以使用以下代码将合并后的数据导出:

merged_data.to_excel("/path/to/merged_data.xlsx", index=False)

在导出数据时,我们还可以指定index是否写入到Excel文件中。这里我们将index设置为False,表示不将index写入到Excel文件中。

至此,我们已经完成了Python合并多个Excel数据的实例教程。

下面是一个示例说明。

示例1

我们可以使用以下数据作为示例:

data1.xlsx

| 姓名 | 性别 | 年龄 |
|------|------|------|
| 张三 | 男   | 18   |
| 李四 | 女   | 19   |

data2.xlsx

| 姓名 | 性别 | 年龄 |
|------|------|------|
| 王五 | 男   | 20   |
| 赵六 | 女   | 21   |

将这两个文件合并为一个文件:

import pandas as pd

data1 = pd.read_excel("data1.xlsx", sheet_name="Sheet1")
data2 = pd.read_excel("data2.xlsx", sheet_name="Sheet1")

merged_data = pd.concat([data1, data2])

merged_data.to_excel("merged_data.xlsx", index=False)

合并后的数据为:

| 姓名 | 性别 | 年龄 |
|------|------|------|
| 张三 | 男   | 18   |
| 李四 | 女   | 19   |
| 王五 | 男   | 20   |
| 赵六 | 女   | 21   |

示例2

我们再来看一个稍微复杂一些的示例。假设我们有三个数据文件,分别为“data1.xlsx”、“data2.xlsx”和“data3.xlsx”。每个文件中有多个sheet,我们需要将每个文件中的所有sheet合并成一个Excel文件,并将不同文件中的sheet分别放到不同的worksheet中。

import pandas as pd

# 定义需要合并的文件名,以及文件中的sheet名
files = [
    {"file_name": "data1.xlsx", "sheet_name": ["Sheet1", "Sheet2"]},
    {"file_name": "data2.xlsx", "sheet_name": ["Sheet1", "Sheet2"]},
    {"file_name": "data3.xlsx", "sheet_name": ["Sheet1", "Sheet2"]}
]

# 定义一个空DataFrame,用于存储合并后的数据
merged_data = pd.DataFrame()

# 循环处理每个文件中的每个sheet
for file in files:
    for sheet_name in file["sheet_name"]:
        # 读取数据
        data = pd.read_excel(file["file_name"], sheet_name=sheet_name)
        # 添加数据到merged_data中
        merged_data = pd.concat([merged_data, data], ignore_index=True)

# 将数据写入Excel文件中
writer = pd.ExcelWriter("merged_data.xlsx")
merged_data.to_excel(writer, index=False, sheet_name="Sheet1")

# 将merged_data中的数据按照文件名拆分到不同的worksheet中
for file in files:
    file_name = file["file_name"]
    for sheet_name in file["sheet_name"]:
        # 获取需要拆分的数据
        data = merged_data[merged_data["source_file"] == file_name][sheet_name]
        # 写入到Excel文件中
        data.to_excel(writer, index=False, sheet_name="{}_{}".format(file_name, sheet_name))

# 保存Excel文件
writer.save()

合并后的结果如下:

+-------------+------+------+-------+
| source_file | 姓名 | 性别 | 年龄 | ... |
+-------------+------+------+-------+
| data1.xlsx  | 张三 | 男   | 18   | ... |
| data1.xlsx  | 李四 | 女   | 19   | ... |
| data1.xlsx  | 王五 | 男   | 20   | ... |
| data1.xlsx  | 赵六 | 女   | 21   | ... |
| data2.xlsx  | 张三 | 男   | 22   | ... |
| data2.xlsx  | 李四 | 女   | 23   | ... |
| data2.xlsx  | 王五 | 男   | 24   | ... |
| data2.xlsx  | 赵六 | 女   | 25   | ... |
| data3.xlsx  | 张三 | 男   | 26   | ... |
| data3.xlsx  | 李四 | 女   | 27   | ... |
| data3.xlsx  | 王五 | 男   | 28   | ... |
| data3.xlsx  | 赵六 | 女   | 29   | ... |
+-------------+------+------+-------+

同时,在Excel文件中,我们会得到以下worksheet:

  • Sheet1:包含合并后的所有数据。
  • data1.xlsx_Sheet1:包含来自“data1.xlsx”文件中的“Sheet1”数据。
  • data1.xlsx_Sheet2:包含来自“data1.xlsx”文件中的“Sheet2”数据。
  • data2.xlsx_Sheet1:包含来自“data2.xlsx”文件中的“Sheet1”数据。
  • data2.xlsx_Sheet2:包含来自“data2.xlsx”文件中的“Sheet2”数据。
  • data3.xlsx_Sheet1:包含来自“data3.xlsx”文件中的“Sheet1”数据。
  • data3.xlsx_Sheet2:包含来自“data3.xlsx”文件中的“Sheet2”数据。