python 如何将多个 xls 文件合并到一个数据框中?

How do I merge multiple xls files into one dataframe in python?

我有 excel 个文件,每个文件有 3 张和所有相同的列 headers。

我想合并所有数据,以便得到一个组合数据框。此数据框应在最终数据框旁边列出工作表名称、行号和 xls 文件名。

我试过了

 import pandas as pd
 dfe = pd.concat(pd.read_excel('abc1.xls', sheet_name=None), ignore_index=True)

这合并了其中一个文件的所有工作表,但没有在数据旁边写下行号或工作表名称。我怎样才能做同样的事情?

期望的输出-

Rownumber Sheetname Filename         State Region  Brand   
 1           tig       abc1.xls      CA         S   Go     
 2           con       abc2.xls      IA         A   Po

这是操作方法。我用了两个函数。第一个函数读取单个 Excel 文件中的所有 sheet,并添加 sheet 名称。第二个函数获取所有 excel 文件,并使用第一个函数读取所有文件中的所有 sheet。

from pandas import pd
def read_sheets(filename):
    result = []
    sheets = pd.read_excel(filename, sheet_name=None)
    for name, sheet in sheets.items():
        sheet['Sheetname'] = name
        sheet['Row'] = sheet.index
        result.append(sheet)
    return pd.concat(result, ignore_index=True)

def read_files(filenames):
    result = []
    for filename in filenames:
        file = read_sheets(filename)
        file['Filename'] = filename
        result.append(file)
    return pd.concat(result, ignore_index=True)

您可以通过提供要读取的文件列表来调用它:

files = ['multisheet.xls', 'multisheet2.xls']
read_files(files)

对于我试过的例子,它产生了一个像这样的数据框:

    A   B  A+B Sheetname  Row         Filename
0   1  10   11    Sheet1    0   multisheet.xls
1   2  11   13    Sheet1    1   multisheet.xls
2   3  12   15    Sheet1    2   multisheet.xls
3   4  13   17    Sheet1    3   multisheet.xls
4   3  10   13    Sheet2    0   multisheet.xls
5   3  11   14    Sheet2    1   multisheet.xls
6   3  12   15    Sheet2    2   multisheet.xls
7   3  13   16    Sheet2    3   multisheet.xls
8   1  10   11    Sheet1    0  multisheet2.xls
9   2  11   13    Sheet1    1  multisheet2.xls
10  3  12   15    Sheet1    2  multisheet2.xls
11  4  13   17    Sheet1    3  multisheet2.xls
12  4  10   13    Sheet2    0  multisheet2.xls
13  3  11   14    Sheet2    1  multisheet2.xls
14  3  12   15    Sheet2    2  multisheet2.xls
15  3  13   16    Sheet2    3  multisheet2.xls