Python在Excel表中循环,放入一个d

2024-09-27 07:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个excel文件foo.xlsx,大约有40张纸sh1sh2等。每张纸的格式如下:

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

在每个工作表中,我想用name\nparty格式重命名vars,使其只使用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] =

或者类似的?


Tags: and文件nameindfnew格式col
1条回答
网友
1楼 · 发布于 2024-09-27 07:32:10

更新日期:2019-09-09:

对v0.25.1使用sheet_name,而不是sheetname


如果设置关键字参数sheetname=Noneread_excelpandas方法允许您一次读取所有工作表。这将返回字典-键是工作表名称,值是作为数据帧的工作表。

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

  1. 向包含相关sheetname的数据帧添加额外的列
  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

相关问题 更多 >

    热门问题