如何在我的数据框中添加一列,说明每行来自哪个工作表名称? Python
Posted
技术标签:
【中文标题】如何在我的数据框中添加一列,说明每行来自哪个工作表名称? Python【英文标题】:How do I add a column to my dataframe that says what sheet name each row is from? Python 【发布时间】:2020-04-07 06:28:05 【问题描述】:我正在使用一个有五张纸的数据框,我想使用其中四张。所以我可以加载它:
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: 'collections.OrderedDict' 对象没有属性 'append'
任何帮助将不胜感激。先感谢您!
假设这是我连接工作表后的数据:
df = pd.concat(pd.read_excel(***.xls, sheet_name=['a', 'b', 'c', 'd'],
header=1), ignore_index=True, sort=False)
Concat data
我的目标是添加一列,说明每行来自哪个工作表,就像这样...
Concat data with sheet name row
希望这可以帮助您了解我的目标。
(编辑)如果我想使用数据框中的所有工作表,但不想列出每个工作表的单独名称,我也想知道如何执行此操作。谢谢!
【问题讨论】:
请分享您的数据示例和您期望的输出。 【参考方案1】:IIUC,在list comprehension
中尝试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])
【讨论】:
如果我想通过说 sheet_name = None 来使用文件中的所有工作表,我能做这样的事情吗?我也希望能够做到这一点,而不必列出工作表名称。 @jpk 是的,检查更新的答案以了解一种可能的方法 感谢您的更新!我刚刚得出了同样的结论,很高兴看到我在同一页上。【参考方案2】:如果您在read_excel
方法中指定sheet_name
,您将返回一个ordered_dict
类型的对象。而ordered_dict
对象没有append
功能。你可以试试这个,
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)
【讨论】:
感谢您的帮助!这也适用于我,我真的很喜欢其他解决方案的简洁性。以上是关于如何在我的数据框中添加一列,说明每行来自哪个工作表名称? Python的主要内容,如果未能解决你的问题,请参考以下文章