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

Posted

技术标签:

【中文标题】如何在 Python 中合并多个具有不同表格列的 Excel 工作表?【英文标题】:How to Merge Several Excel Sheets With Different Table Columns in Python? 【发布时间】:2019-10-27 16:58:10 【问题描述】:

我有一些不同列的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

【问题讨论】:

嗨,Amreeta,您能否进一步扩展您的问题,包括您现在获得的以及您期望拥有的? 你应该使用concat() 嗨@BorjaTur,我想要的是要合并的两个文件,第一个代码只对两个文件执行,我编写的第二个文件预计会合并两个以上的文件,但我想我哪里出错了…… @anky_91 我曾尝试使用 concat() 但表示所有文件的列名应该相同。如果您知道如何解决它,请您发布它的语法吗? 【参考方案1】:

两张纸的代码也不起作用,对吧?该参数丢失,我建议将不同类型的 excel 工作表保存在一个新文件夹中,然后根据以下帮助为每种类型的 excel 工作表创建一个文件: Loading multiple csv files of a folder into one dataframe

然后你可以运行合并:

 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 工作表创建不同的文件夹是个好主意,但如果我们需要对 1000 个 excel 文件进行排序怎么办? @AmreetaKoner 没错,然后看看 conncat,第二个代码只有在您将所有 excel 文件加载到树表中之后 代码中缺少C,您可以尝试再次运行 加C合并三个excel。万一有100个excel表要合并,你能告诉我一个出路吗?【参考方案2】:

您可以通过下面给出的示例代码来做到这一点。下面给出的代码即将将三个 .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)

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

【讨论】:

感谢您的帮助!此代码适用于三个 excel 工作表,但如果我们有 100 个工作表可以合并为一个呢?

以上是关于如何在 Python 中合并多个具有不同表格列的 Excel 工作表?的主要内容,如果未能解决你的问题,请参考以下文章

在python中合并具有不同长度和列的数据框列表

如何在Google表格中合并具有相同索引且具有不同值的行?

Pandas 将具有多个值的行数据合并到列的 Python 列表中

excel 两个表格如何匹配多个数据并合并

python合并多个EXCEL表

如何合并具有不同列的相同行?