提问者:小点点

如何在数据框中添加一列,说明每行的工作表名称?蟒蛇


我正在使用具有五张工作表的数据帧,我想使用其中的四张。所以我可以加载它:

< code>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)

但是我收到了以下错误:

AttributeError:“个集合。OrderedDict“对象没有属性”append“

任何帮助都将不胜感激。提前感谢!

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

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

串联数据

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

使用工作表名称行连接数据

希望这能帮助你理解我想做什么。

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


共2个答案

匿名用户

IIUC,尝试DataFrame.assign中的列表理解

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

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

如果要使用所有图纸并指定一列图纸名称,可以执行以下操作:

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])

匿名用户

如果在read_excel方法中指定sheet_name,则将返回type对象。并且ordered_dict对象没有附加函数。你可以试试这个,

import pandas as pd

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

df = pd.DataFrame()

for name, frame in data.items():
    frame['sheet'] = name
    df = df.append(frame)

print(df)