Python通过Excel工作表循环,放入一个df
我有一个excel文件foo.xlsx
与大约40张sh1
, sh2
等。每张表的格式为:
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
设置为pandas
的read_excel
方法,则可以一次读取所有表单。 这将返回一个字典 – 键是工作表名称,值是工作表作为数据框。
使用这个,我们可以简单地遍历字典,并:
- 向包含相关工作表名称的数据框添加一个额外的列
- 使用
rename
方法重命名我们的列 – 通过使用lambda
,我们只需要在每次有新行时拆分每个列名获得列表的最后一个条目。 如果没有新行,列名称不变。 - 追加到“全表”
一旦完成,我们重置索引,一切都会好的。 注意:如果您在一张纸上显示的是当事人而不是其他人,则此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