如何合并多个工作表并用工作表名称重命名列名?

Posted

技术标签:

【中文标题】如何合并多个工作表并用工作表名称重命名列名?【英文标题】:How to merge multiple sheets and rename column names with the names of the sheet names? 【发布时间】:2021-08-23 15:52:56 【问题描述】:

我有以下数据。都在一个excel文件中。

    Sheet name: may2019
    Productivity Count                          
 Date : 01-Apr-2020 00:00 to 30-Apr-2020 23:59                          
 Date Type: Finalized Date Modality: All     
    Name    MR  DX  CT  US  MG  BMD TOTAL
    Svetlana    29  275 101 126 5   5   541
    Kate    32  652 67  171 1   0   923
    Andrew  0   452 0   259 1   0   712
    Tom     50  461 61  104 4   0   680
    Maya    0   353 0   406 0   0   759
    Ben     0   1009    0   143 0   0   1152
    Justin  0   2   9   0   1   9   21
    Total   111 3204    238 1209    12  14  4788

    Sheet Name: June 2020
Productivity Count                              
 Date : 01-Jun-2019 00:00 to 30-Jun-2019 23:59                              
 Date Type: Finalized Date Modality: All

NAme US DX  CT  MR  MG  BMD TOTAL
Svetlana    4   0   17  6   0   4   31
Kate    158 526 64  48  1   0   797
Andrew  154 230 0   0   0   0   384
Tom     1   0   19  20  2   8   50
Maya    260 467 0   0   1   1   729
Ben     169 530 59  40  3   0   801
Justin  125 164 0   0   4   0   293
Alvin   0   1   0   0   0   0   1
Total   871 1918    159 114 11  13  3086

我想将所有工作表合并到一个工作表中,删除所有工作表的前 3 行,这就是我正在寻找的输出

Sl.No   Name US_jun2019 DX_jun2019  CT_jun2019  MR_jun2019  MG_jun2019  BMD_jun2019 TOTAL_jun2019   MR_may2019  DX_may2019  CT_may2019  US_may2019  MG_may2019  BMD_may2019 TOTAL_may2019
1   Svetlana    4   0   17  6   0   4   31  29  275 101 126 5   5   541
2   Kate    158 526 64  48  1   0   797 32  652 67  171 1   0   923
3   Andrew  154 230 0   0   0   0   384 0   353 0   406 0   0   759
4   Tom     1   0   19  20  2   8   50  0   2   9   0   1   9   21
5   Maya    260 467 0   0   1   1   729 0   1009    0   143 0   0   1152
6   Ben     169 530 59  40  3   0   801 50  461 61  104 4   0   680
7   Justin  125 164 0   0   4   0   293 0   452 0   259 1   0   712
8   Alvin   0   1   0   0   0   0   1   #N/A    #N/A    #N/A    #N/A    #N/A    #N/A    #N/A

我尝试了以下代码,但输出不是我要查找的。​​p>

df=pd.concat(df,sort=False)
df= df.drop(df.index[[0,1]])
df=df.rename(columns=df.iloc[0])
df= df.drop(df.index[[0]])
df=df.drop(['Sl.No'], axis = 1)

print(df)

【问题讨论】:

【参考方案1】:

首先,阅读两张 Excel 表格。

>>> df1 = pd.read_excel('path/to/excel/file.xlsx', sheet_name="may2019")
>>> df2 = pd.read_excel('path/to/excel/file.xlsx', sheet_name="jun2019")

删除前三行。

>>> df1.drop(index=range(3), inplace=True)
>>> df2.drop(index=range(3), inplace=True)

将列重命名为第一行,并删除第一行

>>> df1.rename(columns=dict(zip(df1.columns, df1.iloc[0])), inplace=True)
>>> df1.drop(index=[0], inplace=True)
>>> df2.rename(columns=dict(zip(df2.columns, df2.iloc[0])), inplace=True)
>>> df2.drop(index=[0], inplace=True)

为列添加后缀。

>>> df1.rename(columns=lambda col_name: col_name + '_may2019', inplace=True)
>>> df2.rename(columns=lambda col_name: col_name + '_jun2019', inplace=True)

删除第二个 DF 中的重复名称列。

>>> df2.drop(columns=['Name'], inplace=True)

连接两个数据框

>>> df = pd.concat([df1, df2], axis=1, inplace=True)

所有代码都集中在一个地方:

import pandas as pd

df1 = pd.read_excel('path/to/excel/file.xlsx', sheet_name="may2019")
df2 = pd.read_excel('path/to/excel/file.xlsx', sheet_name="jun2019")

df1.drop(index=range(3), inplace=True)
df2.drop(index=range(3), inplace=True)

df1.rename(columns=dict(zip(df1.columns, df1.iloc[0])), inplace=True)
df1.drop(index=[0], inplace=True)
df2.rename(columns=dict(zip(df2.columns, df2.iloc[0])), inplace=True)
df2.drop(index=[0], inplace=True)

df1.rename(columns=lambda col_name: col_name + '_may2019', inplace=True)
df2.rename(columns=lambda col_name: col_name + '_jun2019', inplace=True)

df2.drop(columns=['Name'], inplace=True)

df = pd.concat([df2, df1], axis=1, inplace=True)

print(df)

【讨论】:

当然。如果有帮助,请接受并投票。

以上是关于如何合并多个工作表并用工作表名称重命名列名?的主要内容,如果未能解决你的问题,请参考以下文章

用vba新建工作表,并命名

从 .xls 文件重命名工作表的名称

复制重命名覆盖mod是啥意思?

如何使用 Python 中的 API 重命名 Google Sheets 电子表格中的(工作)表?

MySQL重命名表

在excel中如何新建一个自己命名的工作簿?