Python通过Excel工作表循环,放入一个df

我有一个excel文件foo.xlsx与大约40张sh1sh2等。每张表的格式为:

 area cnt name\nparty1 name\nparty2 blah 9 5 5 word 3 7 5 

在每张表格中,我想用格式name\nparty重新命名这些variables,只将party作为标签。 示例输出:

 area cnt party1 party2 sheet bacon 9 5 5 sh1 spam 3 7 5 sh1 eggs 2 18 4 sh2 

我正在阅读文件:

 book = pd.ExcelFile(path) 

然后想知道我是否需要这样做:

 for f in filelist: df = pd.ExcelFile.parse(book,sheetname=??) 'more operations here' # only change column names 2 and 3 i, col in enumerate(df): if i>=2 and i<=3: new_col_name = col.split("\n")[-1] df[new_col_name] = 

或类似的东西?

如果将关键字参数sheetname=None设置为pandasread_excel方法,则可以一次读取所有表单。 这将返回一个字典 – 键是工作表名称,值是工作表作为数据框。

使用这个,我们可以简单地遍历字典,并:

  1. 向包含相关工作表名称的数据框添加一个额外的列
  2. 使用rename方法重命名我们的列 – 通过使用lambda ,我们只需要在每次有新行时拆分每个列名获得列表的最后一个条目。 如果没有新行,列名称不变。
  3. 追加到“全表”

一旦完成,我们重置索引,一切都会好的。 注意:如果您在一张纸上显示的是当事人而不是其他人,则此function仍然有效,但是会为每张使用NaN纸张填写任何缺失的列。

 import pandas as pd sheets_dict = pd.read_excel('Book1.xlsx', sheetname=None) full_table = pd.DataFrame() for name, sheet in sheets_dict.items(): sheet['sheet'] = name sheet = sheet.rename(columns=lambda x: x.split('\n')[-1]) full_table = full_table.append(sheet) full_table.reset_index(inplace=True, drop=True) print full_table 

打印:

  area cnt party1 party2 sheet 0 bacon 9 5 5 Sheet1 1 spam 3 7 5 Sheet1 2 eggs 2 18 4 Sheet2