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

时间:2017-06-14 15:36:32

标签: python excel pandas

我有一个excel文件for(int i = startingNum; i <= endingNum; i++) { if (!String.valueOf(i).contains("3")) { // Here counter++; } } ,大约有40张foo.xlsxsh1等。每张图纸都有以下格式:

sh2

在每张工作表中,我想重命名格式为area cnt name\nparty1 name\nparty2 blah 9 5 5 word 3 7 5 的变量,只将name\nparty作为标签。示例输出:

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) 

或类似的东西?

1 个答案:

答案 0 :(得分:12)

read_excel pandas方法可让您在设置关键字参数sheetname=None时一次阅读所有工作表。这将返回一个字典 - 键是工作表名称,值是工作表作为数据帧。

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

  1. 向包含相关工作表名称的数据框添加一个额外的列
  2. 使用rename方法重命名我们的列 - 使用lambda,只要有新行,我们只需通过拆分每个列名称获取列表的最后一个条目。如果没有新行,则列名称保持不变。
  3. 附加到“完整表格”
  4. 一旦完成,我们重置索引,一切都应该很好。注意:如果您在一张纸上但不在其他纸张上出现派对,这仍然有效,但会使用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