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

发布于 2021-01-29 17:45:44

我有一个Excel文件foo.xlsx与大约40个片材sh1sh2等。每个片材的格式是:

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

在每个工作表中,我想使用格式将vars重命名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)

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

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] =

或类似的东西?

关注者
0
被浏览
187
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    截至2019-09-09更新:

    使用sheet_name了v0.25.1代替sheetname


    如果设置关键字parameter
    read_excel,则pandas可以使用方法一次读取所有工作表sheetname=None。这将返回一个字典-
    键是工作表名称,值是作为数据帧的工作表。

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

    1. 在包含相关工作表名称的数据框中添加额外的列
    2. 使用rename方法来重命名我们的列-通过使用lambda,我们只要在有新行时就分割列表的每个列名,就可以获取列表的最后一个条目。如果没有新行,则列名不变。
    3. 附加到“全表”

    完成此操作后,我们将重置索引,并且一切都将恢复正常。注意:如果您在一个工作表上有聚会,但在其他工作表上却没有,则仍然可以使用,但是会用填充每个工作表的所有缺失列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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看