当前位置: 首页 > 面试题库 >

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

赫连子石
2023-03-14
问题内容

我有一个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] =

或类似的东西?


问题答案:

截至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


 类似资料:
  • 问题内容: 只要工作表不同,就可以很容易地将许多熊猫数据框添加到excel工作簿中。但是,如果要使用内置的df.to_excel功能的熊猫,将许多数据帧放入一个工作表中有些棘手。 上面的代码不起作用。您将得到错误 现在,我已经进行了足够的实验,以至于找到了使之工作的方法。 这会起作用。因此,我将这个问题发布在stackoverflow上的目的是双重的。首先,我希望这对某人在excel中将多个数据框

  • 所以我有 1500 个 Excel 工作簿,每个工作簿都有 10 张结构完全相同的工作表。我尝试将多个Excel工作簿合并到一个文件中,并使用以下代码成功: 谢谢,努尔贝克

  • 我知道如何复制工作表,但这将导致多个工作表。我需要的是一个输出工作表,一个接一个地包含所有的工作表。 目前我正在做的是将每个工作表导出为< code>DataTable,然后逐个导入: 但这样,我就失去了单元格样式和文本格式 有没有办法用保留样式?

  • 我有一个Excel工作簿,其中包含36个不同的工作表,我每两周收到一次,工作表在所有标签上都有共同的标题,并且每个标签上都有不同的唯一标题,但每条记录都有一个唯一的ID,可以有多个记录。 我要做的是从所有的工作表中提取唯一的id,然后将每个工作表中的数据提取到一个工作表中,其中包含所有的公共标题和唯一标题。 我正在考虑使用下面帖子中的代码将其导入Access。连接表并将其导出回Excel中的一个工

  • 我在页面上有一个表,我需要从表中的特定单元格中读取值。我想把这些值写到excel文件中。问题是for loop只循环一次,并且只为Excel中的第一个单元格写入值。我试过很多不同的循环,在谷歌上搜索,但都找不到答案。请帮帮忙。下面是我要编写到Excel的代码: 这是我写入excel文件的地方 循环成功执行并从表中正确打印出值,但我需要将这些值写入Excel。似乎在excel中写入第一个值后,for

  • 问题内容: 我有一个带有源文件路径的字符串和另一个带有destfile路径的字符串,它们都指向Excel工作簿。 我想获取源文件的第一张纸并将其作为新选项卡复制到destfile(与destfile中的位置无关),然后保存它。 在or或or中找不到简单的方法。我想念什么吗? 问题答案: 解决方案1 使用该软件包的仅Python解决方案。仅数据值将被复制。 解决方案2 使用该程序包将复制操作委派给E