python如何合并多个工作表

python如何合并多个工作表

作者:Elara发布时间:2026-01-06阅读时长:0 分钟阅读次数:11

用户关注问题

Q
如何使用Python将多个Excel工作表合并成一个?

我有一个Excel文件包含多个工作表,想要用Python把它们合并成一个单独的工作表,有什么方法吗?

A

用pandas合并多个工作表到一个DataFrame

可以使用pandas库的read_excel函数读取每个工作表的数据,将所有数据拼接成一个DataFrame,最后再保存成新的Excel文件。示例代码如下:

import pandas as pd

file_path = 'your_excel_file.xlsx'
sheets = pd.ExcelFile(file_path).sheet_names

data_frames = []
for sheet in sheets:
    df = pd.read_excel(file_path, sheet_name=sheet)
    data_frames.append(df)

merged_df = pd.concat(data_frames, ignore_index=True)
merged_df.to_excel('merged_output.xlsx', index=False)

该方法适用于数据结构基本一致的工作表合并。

Q
Python合并多个Excel工作表时如何处理表结构不一致的问题?

如果多个工作表的列名称或者数量不一样,如何用Python进行合并?

A

调整列或补齐缺失列后再合并

在合并之前,可以检查每个工作表的列,并统一列名或者补齐缺少的列,以保证数据框结构一致。例如,可以先统计所有工作表的所有列名,然后给缺失列的工作表补上空值列。拼接时选用pandas的concat函数,并设置参数以适应不同形状的数据。代码示例:

import pandas as pd

file_path = 'file.xlsx'
sheets = pd.ExcelFile(file_path).sheet_names

all_columns = set()
for sheet in sheets:
    df = pd.read_excel(file_path, sheet_name=sheet)
    all_columns.update(df.columns)

all_columns = list(all_columns)

data_frames = []
for sheet in sheets:
    df = pd.read_excel(file_path, sheet_name=sheet)
    for col in all_columns:
        if col not in df.columns:
            df[col] = pd.NA
    df = df[all_columns]
    data_frames.append(df)

merged_df = pd.concat(data_frames, ignore_index=True)
merged_df.to_excel('merged_output.xlsx', index=False)

这样保证了即使表结构不完全相同,也能合并到一个统一格式的表中。

Q
用Python合并工作表时如何仅选取部分工作表或特定列?

如果我不想合并Excel文件的所有工作表,而是指定几个并且只合并某些列,应该怎么操作?

A

指定工作表名称和列名读取后合并

可以在读取时通过参数指定所需的工作表和列。例如,利用pandas的read_excel函数的sheet_name参数读取指定工作表,使用usecols参数选择列。读取多个特定工作表后,拼接选中的列实现合并。示例代码:

import pandas as pd

file_path = 'file.xlsx'
specific_sheets = ['Sheet1', 'Sheet3']
columns_to_use = ['Name', 'Age', 'Score']

data_frames = []
for sheet in specific_sheets:
    df = pd.read_excel(file_path, sheet_name=sheet, usecols=columns_to_use)
    data_frames.append(df)

merged_df = pd.concat(data_frames, ignore_index=True)
merged_df.to_excel('merged_filtered.xlsx', index=False)

这样可以灵活控制合并的数据源和内容。