Python循环遍历Excel表格,放入一个df中

2024-01-03

我有一个 Excel 文件foo.xlsx约40张sh1, 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) 

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

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

或类似的东西?


The read_excel的方法pandas如果您设置关键字参数,则可以一次读取所有工作表sheet_name=None(在某些旧版本中pandas这被称为sheetname)。这将返回一个字典 - 键是工作表名称,值是作为数据帧的工作表。

使用它,我们可以简单地循环字典并:

  1. 向包含相关工作表名称的数据框添加额外的列
  2. Use the rename重命名我们的列的方法 - 通过使用lambda,我们只需在出现新行时获取通过拆分每个列名称而获得的列表的最终条目。如果没有换行,则列名不变。
  3. 追加到列表中,在末尾合并。

完成此操作后,我们将所有工作表合并为一张pd.concat。然后我们重置索引,一切都会好起来的。注意:如果您在一张纸上有参与方,但没有其他参与方,这仍然有效,但会用以下内容填充每张纸的任何缺失列NaN.

import pandas as pd

sheets_dict = pd.read_excel('Book1.xlsx', sheet_name=None)

all_sheets = []
for name, sheet in sheets_dict.items():
    sheet['sheet'] = name
    sheet = sheet.rename(columns=lambda x: x.split('\n')[-1])
    all_sheets.append(sheet)

full_table = pd.concat(all_sheets)
full_table.reset_index(inplace=True, drop=True)

print(full_table)

Prints:

    area  cnt  party1  party2   sheet
0  bacon    9       5       5  Sheet1
1   spam    3       7       5  Sheet1
2   eggs    2      18       4  Sheet2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python循环遍历Excel表格,放入一个df中 的相关文章

随机推荐