【问题标题】:Merging excel sheets in a single workbook on column value into a pandas dataframe将列值的单个工作簿中的 excel 工作表合并到熊猫数据框中
【发布时间】:2019-01-25 12:42:57
【问题描述】:

我需要在一个 Excel 工作簿中获取多个工作表,并根据每个工作表中的一组列值将它们合并到一个数据框中。

我有:

Sheet 1:
ID  A  B  C
1   0  l  g
2   2  e  n
3   3  c  h

表 2:

ID L  M  N
1  7  u  i
2  0  o  j
3  9  c  k

我正在寻找: 表 3:

ID A B C L M N
1
2
3

编辑我正在处理任意数量的工作表,这使得它变得复杂。

我是 pandas/python/coding 的新手,但现在正在使用它:

import pandas as pd
import numpy as np

def get_sheets():
    """ Get sheets to join"""
    ask = input("Are the sheets in the same workbook?".lower())
    if ask == "yes" or "y":
        file = input("Please enter the filepath for the workbook")
        df_lib = pd.read_excel(file, None)
        merged = pd.merge(df_lib.items(), how="left" on='ID')
        merged.to_csv("new_merged_data.csv")

我返回一个错误,因为我没有“正确”的数据框可以加入。但我不确定如何分解由 pd.read_excel 函数创建的数据帧库或在 pd.merge 函数中调用它们。

【问题讨论】:

    标签: python excel pandas


    【解决方案1】:

    您可以在 2 个不同的数据框中获取两个工作表并将它们合并。

    import pandas as pd
    import numpy as np
    
    def get_sheets():
    """ Get sheets to join"""
     ask = input("Are the sheets in the same workbook?".lower())
     if ask == "yes" or "y":
        file = input("Please enter the filepath for the workbook")
    
        df1 = pd.read_excel(file, sheet_name='Sheet1')
        df2 = pd.read_excel(file, sheet_name='Sheet2')
        results= df1.merge(df2, on='ID', how="left")
        results.to_csv("new_merged_data.csv")
    

    除此之外,我注意到在您的代码中,您在how="left" on='ID' 之间缺少,

    【讨论】:

    • 非常感谢!不过,我应该更清楚。我正在处理任意数量的纸张。我正在考虑一种增加数据帧变量数量的方法,但这似乎不是一个好主意。
    【解决方案2】:

    如果您想要合并任意数量的工作表,您可以使用以下命令加载所有工作表:

    # for pandas version < 0.21.0
    sheets = pd.read_excel(file_name, sheetname=None)
    
    # for pandas version >= 0.21.0
    sheets = pd.read_excel(file_name, sheet_name=None)
    

    这将为您提供一个有序的字典,其中工作表名称作为键,相应的数据框作为值。

    然后您将需要工作表中的数据框列表。您可以使用

    dfs = list(sheets.values())
    

    完成后,您可以使用下面的代码将所有工作表合并到一个数据框中。

    from functools import reduce
    merged = reduce(lambda left, right: pd.merge(left, right, on='ID', how='left'), dfs)
    results.to_csv("new_merged_data.csv")
    

    请尝试一下:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多