在Pandas(python)

时间:2017-08-23 12:55:34

标签: python excel pandas

设置:我使用的是jupyter笔记本,Python版本3.6.2和Excel版本15.36

我有几个excel文件(每个文件有多个工作表)。我已经加载了每个excel文件(下面的代码),以便为每个excel文件创建一个数据框,该数据框是文件中工作表的有序字典。

import pandas as pd

df1 = pd.read_excel('2014.xlsx', sheetname=None, header=1)
df2 = pd.read_excel('2015.xlsx', sheetname=None, header=1)

..等..

现在,我想遍历每个文件的每个工作表,向包含工作表名称的工作表的每一行添加一个新单元格,然后将所有文件的所有工作表合并为一个大工作表。

我是python的新手,很想听听执行此任务的干净方法。

2 个答案:

答案 0 :(得分:0)

因此,要循环遍历所有文件,您可以使用基于列表的简单for循环:

article.hidden {
  display: none !important;
}

答案 1 :(得分:0)

不要单独阅读所有内容。你只需要重复一堆命令。设置元数据结构以获取有关工作表的信息:

metadata = [
    {'book': 'book1.xlsx', 'sheets': ['sheet1', 'sheet2']},
    {'book': 'book2.xlsx', 'sheets': ['sheet1']},
    {'book': 'book3.xlsx', 'sheets': ['sheet1', 'sheet2', 'sheet3']},
    {'book': 'book4.xlsx', 'sheets': ['sheet1', 'sheet2']},
]

并使用pandas.concat方法将列添加到assign,以便将列添加到每本书中。

new_df = pandas.concat([
    pandas.read_excel(md['book'], sheetname=s).assign(book=md['book']
    for md in metadata for s in md['sheets']
], ignore_index=True)

这有点简洁,而且对于经验较少的python / pandas用户而言,难以阅读。如果你要用正常的for循环写出来,它看起来像这样:

_dfs = []
for md in metadata:
    for s in md['sheets']:
        _dfs.append(
            pandas.read_excel(md['book'], sheetname=s)
                  .assign(book=md['book']
        )

df = pandas.concat(_dfs, ignore_index=True)