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

安装:我正在使用jupyter笔记本,Python版本3.6.2和Excel版本15.36

我有几个Excel文件(每个文件与多张)。 我已经加载了每个excel文件(下面的代码),以便为每个excel文件创build一个文件中表单的有序字典的数据框。

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,并希望听到干净的方式来执行此任务。

所以,为了遍历所有的文件,你可以使用一个简单的循环基于列表:

 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 ,使用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) 

这是一个有点简洁,并承认很难阅读更less的经验python/pandas的用户。 如果你想在正常循环中写入,看起来像这样:

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