提问者:小点点

在Pandas(python)中编辑和合并excel工作表


安装:我使用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个答案

匿名用户

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

years = ['2014', '2015', '2016']
for year in years :
   df1 = pd.read_excel(year +'.xlsx')

匿名用户

不要把每件事都单独读。你只需要重复一系列命令。为有关工作表的信息设置元数据结构:

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

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/熊猫用户来说,这有点简洁,不可否认地很难阅读。如果你在一个普通的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)