如何在我的数据框中添加一列,说明每行来自哪个工作表名称?Python

jpk*_*jpk 5 python excel python-3.x pandas

我正在使用一个有五张纸的数据框,我想使用其中的四张。所以我可以加载它:

df = pd.read_excel('***.xls', sheet_name=['a', 'b', 'c', 'd'])

但是现在我想添加一个列,说明每行在哪个工作表中,但我不知道该怎么做。我试过这样的事情

for name, frame in df.items():
        frame['Sheet'] = name
        df = df.append(frame, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

AttributeError: 'collections.OrderedDict' 对象没有属性 'append'

任何帮助将不胜感激。先感谢您!

假设这是我连接工作表后我的数据的样子:

df = pd.concat(pd.read_excel(***.xls, sheet_name=['a', 'b', 'c', 'd'],
                          header=1), ignore_index=True, sort=False)
Run Code Online (Sandbox Code Playgroud)

连接数据

我的目标是添加一列,说明每行来自哪个工作表,就像这样......

带有工作表名称行的连接数据

希望这可以帮助您了解我想要做什么。

(编辑)如果我想使用数据框中的所有工作表,但不想列出每个工作表的单独名称,我也想知道如何执行此操作。谢谢!

Chr*_*s A 5

IIUC,尝试DataFrame.assignlist comprehension

sheets = ['a', 'b', 'c', 'd']

df = pd.concat([pd.read_excel('***.xls', sheet_name=s)
                .assign(sheet_name=s) for s in sheets])
Run Code Online (Sandbox Code Playgroud)

更新

如果要使用所有工作表并分配一列工作表名称,您可以执行以下操作:

workbook = pd.ExcelFile('***.xls')
sheets = workbook.sheet_names

df = pd.concat([pd.read_excel(workbook, sheet_name=s)
                .assign(sheet_name=s) for s in sheets])
Run Code Online (Sandbox Code Playgroud)