【问题标题】:How to merge columns from multiple sheets in one excel file by pandas如何通过pandas将多个工作表中的列合并到一个excel文件中
【发布时间】:2020-12-25 11:08:24
【问题描述】:

如何使用 pandas 组合每个工作表中的列?

我需要遍历一个 Excel 文件中的每个工作表,并分别合并每个工作表,如下图所示。

我在一个文件中有大约 1000 张工作表,工作表名称不一样。

如何进行迭代合并?

【问题讨论】:

    标签: python excel pandas


    【解决方案1】:
    • 似乎最容易使用pandas.read_excelsheet_name=None
      • 指定 None 以获取所有工作表。
      • 这将创建一个 dict 的数据帧,其中 sheet_names 作为键。
      • 遍历keysvalues,将两列合并并写回文件。
    • 根据您的评论,.fillna() 方法可用于任一列,如以下代码所示。

    只将新的组合列写回工作表

    import pandas as pd
    
    # create dict of dataframes
    df = pd.read_excel('test.xlsx', sheet_name=None)
    
    # iterate through dict
    for k, v in df.items():
        with pd.ExcelWriter('combined.xlsx', mode='a', engine='openpyxl') as writer:  # write sheets to a new file
            combined = v.iloc[:, 0].fillna('xxx') + ' ' + v.iloc[:, 1].fillna('xxx')  # combine the first and second column
            combined.to_excel(writer, sheet_name=k, index=False, header=False)
    

    将原始列和组合列写回工作表

    df = pd.read_excel('test.xlsx', sheet_name=None)
    
    for k, v in df.items():
        with pd.ExcelWriter('combined.xlsx', mode='a', engine='openpyxl') as writer:  # write sheets to a new file
            v['comb'] = v.iloc[:, 0].fillna('xxx') + ' ' + v.iloc[:, 1].fillna('xxx')  # combine the first and second column
            v.to_excel(writer, sheet_name=k, index=False, header=False)
    

    【讨论】:

      【解决方案2】:

      更新:

      import pandas as pd
      
      writer = pd.ExcelFile('Downloads\wbook.xlsx')
      
      writer.sheet_names
      #prints names of the spreadsheets.
      
      excelfile = pd.ExcelWriter('workb1.xlsx', engine='openpyxl')
      for i in writer.sheet_names:
          df = pd.read_excel(writer, sheet_name=i, header=None)
          df[3] = df.iloc[:, 0] + ' ' + df.iloc[:, 1]
          df.to_excel(excelfile, sheet_name=i, index=False)
      excelfile.save()
      

      创建一个新的电子表格,其中包含原始工作簿中每个工作表的 A 列和 B 列的组合。

      【讨论】:

        【解决方案3】:

        这在很多帖子中都有解释(Using Pandas to pd.read_excel() for multiple worksheets of the same workbook)

        xls = pd.ExcelFile('path_to_file.xls')
        df1 = pd.read_excel(xls, 'Sheet1')
        df2 = pd.read_excel(xls, 'Sheet2')
        

        按列合并数据框,

        df1.append(df2)
        df1.append(df3)
        ...
        

        以上代码将生成一个合并的数据框,保存在 df1 中。

        【讨论】:

          【解决方案4】:

          尝试分别读取 3 个 excel 表,如下所示,然后使用 pd.merge 将 df1、df2、df3 按索引或任何其他列合并为单个数据框,以匹配所有三个数据框的右列
                      import pandas as pd
                      df1 = pd.read_excel(f_name.xls, 'Sheet1')
                      df2 = pd.read_excel(f_name.xls, 'Sheet2')
                      df3 = pd.read_excel(f_name.xls, 'Sheet3')
                      df = pd.merge(df1, (pd.merge(df2, df3, how='outer', left_index=True, right_index=True), how='outer', left_index=True, right_index=True)
          

          【讨论】:

          • @hhp,欢迎来到 StackOverflow 并感谢您的回答。但是,请不要为了让文字更加突出而使用标题(#)符号,这无济于事。
          猜你喜欢
          • 2021-08-09
          • 1970-01-01
          • 1970-01-01
          • 2019-08-25
          • 2010-11-07
          • 2013-09-15
          • 1970-01-01
          • 1970-01-01
          • 2019-12-18
          相关资源
          最近更新 更多