【问题标题】:Merge data with varying headers in Python or R在 Python 或 R 中合并具有不同标题的数据
【发布时间】:2018-09-25 13:40:53
【问题描述】:

我有一个需要合并的包含多张工作表的 excel 文件。但是,列标题彼此不同。目前数据是这样的。

Sheet 1
+-------------+--------------+----------+--------+---------+---------+
| FISCAL_YEAR | COMPANY_CODE | ACCOUNTS | Header | Header1 | Header2 |
+-------------+--------------+----------+--------+---------+---------+
|          17 | Data         | Data     |      0 |       0 |       0 |
|          17 | Data         | Data     |      0 |       0 |       0 |
+-------------+--------------+----------+--------+---------+---------+

Sheet 2
+-------------+--------------+----------+---------+---------+
| FISCAL_YEAR | COMPANY_CODE | ACCOUNTS | Header3 | Header2 |
+-------------+--------------+----------+---------+---------+
|          15 | Data         | Data     |       0 |       0 |
|          15 | Data         | Data     |       0 |       0 |
+-------------+--------------+----------+---------+---------+

Sheet 3
+-------------+--------------+----------+---------+---------+---------+
| FISCAL_YEAR | COMPANY_CODE | ACCOUNTS | Header4 | Header1 | Header3 |
+-------------+--------------+----------+---------+---------+---------+
|          16 | Data         | Data     |       0 |       0 |       0 |
|          16 | Data         | Data     |       0 |       0 |       0 |
+-------------+--------------+----------+---------+---------+---------+

OUTPUT
+-------------+--------------+----------+--------+---------+---------+---------+---------+-----------+
| FISCAL_YEAR | COMPANY_CODE | ACCOUNTS | Header | Header1 | Header2 | Header3 | Header4 | SheetName |
+-------------+--------------+----------+--------+---------+---------+---------+---------+-----------+
|          17 | Data         | Data     | 0      | 0       | 0       | null    | null    | Sheet1    |
|          17 | Data         | Data     | 0      | 0       | 0       | null    | null    | Sheet1    |
|          15 | Data         | Data     | null   | null    | 0       | 0       | null    | Sheet2    |
|          15 | Data         | Data     | null   | null    | 0       | 0       | null    | Sheet2    |
|          16 | Data         | Data     | null   | 0       | null    | 0       | 0       | Sheet3    |
|          16 | Data         | Data     | null   | 0       | null    | 0       | 0       | Sheet3    |
+-------------+--------------+----------+--------+---------+---------+---------+---------+-----------+

我对 Python 比较陌生。我用过 Pandas 和 numpy。 我有多达 60 张纸要处理。谁能帮助我了解如何实现这一目标?如果不是python,我应该使用其他工具/方法吗?我真的可以从一个代码示例开始。

非常感谢您的帮助。提前谢谢你

【问题讨论】:

    标签: python r excel dataframe consolidation


    【解决方案1】:

    使用 R,这很容易做到。

    library(openxlsx) # to read xlsx files
    library(purrr)    # for the "map" function
    
    wb <- loadWorkbook("path/filename.xlsx")
    all_sheets <- names(wb)
    
    merged_data <- map_df(all_sheets, ~ read.xlsx(wb, sheet = .x)
    

    【讨论】:

    • 感谢您的帮助!
    【解决方案2】:

    在 R 中使用 for 循环和 rbind

    for (i in file.list) {
        data <- rbind(data, read.xlsx(i, sheetIndex = 1))
    }
    

    rbind 用法:要垂直连接两个数据框(数据集),请使用 rbind 函数。两个数据框必须具有相同的变量,但它们的顺序不必相同。

    total <- rbind(data frameA, data frameB) 
    

    【讨论】:

    • 我认为重点在于它们并非都具有相同的变量。如果您不熟悉,请查看dplyr 中的bind_rows() - 如果只有一个数据集有缺失变量,它将填补缺失的变量。因为dplyrpurrr 都设计为协同工作,所以即使所有文件中没有所有变量,上述解决方案也可以工作。
    【解决方案3】:
    import pandas as pd
    
    filepath = r"filePath here"
    sheets_dict = pd.read_excel(filepath, sheet_name=None)
    
    full_table = pd.DataFrame()
    
    #loop through sheets
    for name, sheet in sheets_dict.items():
        sheet['sheet'] = name
        #sheet = sheet.rename(columns=lambda x: x.split('\n')[-1])
        full_table = full_table.append (sheet)
    
    full_table.reset_index (inplace=True, drop=True)
    
    #Write to Excel
    writer = pd.ExcelWriter('consolidated_TB1.xlsx', engine='xlsxwriter')
    full_table.to_excel(writer,'Sheet1')
    
    # Close the Pandas Excel writer and output the Excel file.
    writer.save()
    

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      相关资源
      最近更新 更多