将多个工作表与列连接在一起作为工作表名称

Posted

技术标签:

【中文标题】将多个工作表与列连接在一起作为工作表名称【英文标题】:Joining multiple sheets together with column as their sheet name 【发布时间】:2021-09-06 05:12:04 【问题描述】:

我在 Python 中有一个带有 Pandas 的函数,它可以转换从 excel 文件中读取的一些 df。

那个 Excel 文件有 5 张,我想通过同一个函数来处理,然后在最后加入它们,加上一个额外的列 df['customer'] = sheet name

假设我想通过以下函数运行工作表:

def function(df):
    df = df.rename(columns=df.iloc[0]).drop(df.index[0]) #drop first row
    df = df.rename(columns=np.nan: 'Model') #rename column to 'model'

    indexNames = df[df['Model'].isin(['No','b', 'a','1988 Total'])].index
    df = df.drop(indexNames)
    df = df.dropna(axis=1,how='all')

    return df

最后,我想有 5 个不同的 df(它们具有相同的结构),我可以在最后加入。但是,在 5 个不同的工作表中,我需要将 sheet_name 显示为一列,以便将它们区分开来。

我尝试使用此代码事先加入他们:

df = pd.concat(pd.read_excel("Final- Stock and Sales WG 2021 New format.xlsx", sheet_name=None), ignore_index=True)

但是,当我在这一行运行 ValueError: cannot reindex from a duplicate axis 的函数时出现值错误 indexNames = df[df['Model'].isin(['No','b', 'a','1988 Total'])].index

欢迎任何更正或其他方法。谢谢!

【问题讨论】:

【参考方案1】:
xls = pd.ExcelFile('datavallatestitemstop2.xlsx')

df_main = pd.DataFrame()
for sheet in xls.sheet_names:
    df = pd.read_excel(xls, sheet)
    df['Sheet-Name'] = sheet
    df_main = df_main.append(df)

输出 -

【讨论】:

以上是关于将多个工作表与列连接在一起作为工作表名称的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 如何获取 Excel 中工作表的名称。

将当前工作簿中的所有工作表复制到新工作簿,但第一张工作表除外

如何将EXCEl中多张Sheet工作表转换成一个PDF

如何将多个Excel工作表合并至一张Excel表格内?

使用 OleDb 从 Excel 文档中获取第一张工作表,而不考虑工作表名称

MS Access sql将5个表与列中的奇怪字符分组