当前位置: 首页 > 知识库问答 >
问题:

如何在Python中合并具有不同表列的多个Excel工作表?

苗学民
2023-03-14

我有一些不同列的excel表格,如下所示:

表A:Col1 Col2 Col3

表B: Col2 Col4 Col5

表C: Col1 Col6 Col7

我的最终表格应该是:

最终表格:Col1 Col2 Col3 Col4 Col5 Col6 Col7

如果没有特定列的详细信息,则应保留为空。我一次只成功地合并了两个表,但我想将所有表合并在一起。

这是合并两张图纸的代码:

    import pandas as pd
    import numpy as np
    import glob
    df = pd.read_excel('C:/Users/Am/Downloads/sales-mar-2014.xlsx')
    status = pd.read_excel('C:/Users/Am/Downloads/customer-status.xlsx')
    all_data_st = pd.merge(df, status, how='outer') 
    all_data_st.to_excel('C:/Users/Am/Downloads/a1.xlsx',header=True)

这是我编写的用于合并两张以上图纸的代码:

    import pandas as pd
    import numpy as np
    import glob
    all_data = pd.DataFrame()
    for f in glob.glob(‘C:/Users/Am/Downloads/*.xlsx’):
    all_data = all_data.merge(pd.read_excel(f), how='outer')
    writer = pd.ExcelWriter('merged.xlsx', engine='xlsxwriter')
    all_data.to_excel(writer,sheet_name='Sheet1')
    writer.save()

这是我得到的错误:

Traceback (most recent call last):
  File "E:/allfile.py", line 7, in <module>
    all_data = all_data.merge(pd.read_excel(f), how='outer')
  File "C:\Users\Am\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\frame.py", line 6868, in merge
    copy=copy, indicator=indicator, validate=validate)
  File "C:\Users\Am\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\reshape\merge.py", line 47, in merge
    validate=validate)
  File "C:\Users\Am\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\reshape\merge.py", line 524, in __init__
    self._validate_specification()
  File "C:\Users\Am\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\reshape\merge.py", line 1033, in _validate_specification
    lidx=self.left_index, ridx=self.right_index))
pandas.errors.MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False

共有2个答案

姜嘉荣
2023-03-14

您可以通过下面给定的示例代码来实现这一点。下面给出的代码将合并三个。包含指定列的xlsx文件。但是,如果您有三个以上的文件,并且有已知的列,您希望在这些列上合并这些多个表数据,那么您必须将这些代码放在一个函数中。此函数应将两个数据集和一个合并列名作为输入,并返回一个合并的数据集。您可以迭代excels文件列表并调用此函数以获得最终合并的数据集。

下面是示例代码:

import pandas as pd
data_A = pd.read_excel('a.xlsx')
data_B = pd.read_excel('b.xlsx')
data_C = pd.read_excel('c.xlsx')
print("File A Data:")
print(data_A)
print("File B Data:")
print(data_B)
print("File C Data:")
print(data_C)

data_AB = pd.merge(left=data_A, right=data_B, on='Col2', how='outer')
data_ABC = pd.merge(left=data_AB, right=data_C, on='Col1', how='outer')
print("Merged Data:")
print(data_ABC)

输出将是包含所有列的所有三个表的合并数据。希望,这可以帮助你解决你的问题。

柯曜文
2023-03-14

两张纸的代码也不行,对吧?参数丢失,我建议将不同类型的excel工作表保存在一个新文件夹中,然后根据以下帮助为每种类型的excel工作表创建一个文件

然后可以运行合并:

 all_data_st = pd.merge(A, B, how='outer', on='Col2')
 all_data_st = pd.merge(all_data_st, C, how='outer', on='Col1')

alternativ尝试运行concat:

all_data = pd.DataFrame()
for f in glob.glob(‘C:/Users/Am/Downloads/*.xlsx’):
  df = pd.read_excel(f)
  all_data = pd.concat([all_data,df], axis=0, ignore_index=True)
 类似资料:
  • 我有两个 excel 工作簿。 一个有3张纸,另一个只有一张纸。我正在尝试将这两个组合成一个工作簿。这个工作簿应该有4张。 这样做给了我一个工作簿,但只有两张。第一个工作簿的第一页和第二个工作簿的第二页。 如何获取一个工作簿中的所有4张工作表?

  • 所以我有 1500 个 Excel 工作簿,每个工作簿都有 10 张结构完全相同的工作表。我尝试将多个Excel工作簿合并到一个文件中,并使用以下代码成功: 谢谢,努尔贝克

  • 我知道如何复制工作表,但这将导致多个工作表。我需要的是一个输出工作表,一个接一个地包含所有的工作表。 目前我正在做的是将每个工作表导出为< code>DataTable,然后逐个导入: 但这样,我就失去了单元格样式和文本格式 有没有办法用保留样式?

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null

  • 我想分别使用python将多个excel文件与多个工作表合并。我不想丢失工作表中的任何格式。它应该复制所有工作表,只创建一个excel文件。 我只能合并第一张,而且所有的格式都丢失了。 这是我的代码:

  • 我有一个Excel工作簿,其中包含36个不同的工作表,我每两周收到一次,工作表在所有标签上都有共同的标题,并且每个标签上都有不同的唯一标题,但每条记录都有一个唯一的ID,可以有多个记录。 我要做的是从所有的工作表中提取唯一的id,然后将每个工作表中的数据提取到一个工作表中,其中包含所有的公共标题和唯一标题。 我正在考虑使用下面帖子中的代码将其导入Access。连接表并将其导出回Excel中的一个工