在 pandas 数据框中转换具有许多工作表(在 shett 名称中带有空格)的 excel 文件

Posted

技术标签:

【中文标题】在 pandas 数据框中转换具有许多工作表(在 shett 名称中带有空格)的 excel 文件【英文标题】:Convert excel file with many sheets (with spaces in the name of the shett) in pandas data frame 【发布时间】:2019-12-07 01:00:17 【问题描述】:

我想将 excel 文件转换为 pandas 数据框。所有工作表名称的名称中都有空格,例如 ' part 1 of 22、part 2 of 22 等等。此外,所有工作表的第一列都是相同的。

我想将此 Excel 文件转换为唯一的数据框。但是我不知道python中的名称会发生​​什么。我的意思是我可以导入它们,但我不知道数据框的名称。

表格已导入,但我不知道它们的名称。在此之后,我想使用另一个“for”并使用 pd.merge() 来创建一个唯一的数据框

for sheet_name in Matrix.sheet_names:
 sheet_name = pd.read_excel(Matrix, sheet_name)
 print(sheet_name.info())

【问题讨论】:

Import multiple excel files into python pandas and concatenate them into one dataframe的可能重复 【参考方案1】:

仅使用您显示的代码 sn-p,每个工作表(每个 DataFrame)都将分配给变量 sheet_name。因此,此变量在每次迭代时都会被覆盖,您只会将最后一张表作为 DataFrame 分配给该变量。

要实现您想要做的事情,您必须存储每张工作表,作为数据框加载到某个地方,例如一个列表。然后,您可以根据需要合并或连接它们。

试试这个:

all_my_sheets = []
for sheet_name in Matrix.sheet_names:
    sheet_name = pd.read_excel(Matrix, sheet_name)
    all_my_sheets.append(sheet_name)

或者,更好的是,使用列表推导:

all_my_sheets = [pd.read_excel(Matrix, sheet_name) for sheet_name in Matrix.sheet_names]

然后您可以像这样将它们连接成一个 DataFrame:

final_df = pd.concat(all_my_sheets, sort=False)

【讨论】:

【参考方案2】:

您可以考虑使用openpyxl 包:

from openpyxl import load_workbook
import pandas as pd

wb = load_workbook(filename=file_path, read_only=True)
all_my_sheets  = wb.sheetnames

# Assuming your sheets have the same headers and footers
n = 1
for ws in all_my_sheets:
  records = []
  for row in ws._cells_by_row(min_col=1,
                              min_row=n,
                              max_col=ws.max_column,
                              max_row=n):
  rec = [cell.value for cell in row]
  records.append(rec)

  # Make sure you don't duplicate the header
  n = 2

# ------------------------------

# Set the column names
records = records[header_row-1:]
header = records.pop(0)

# Create your df
df = pd.DataFrame(records, columns=header)

【讨论】:

【参考方案3】:

调用一次 read_excel() 可能最简单,然后将内容保存到列表中。

所以,第一步应该是这样的: dfs = pd.read_excel(["Sheet 1", "Sheet 2", "Sheet 3"])

请注意,您在列表中使用的工作表名称应与 excel 文件中的相同。然后,如果您想垂直连接这些工作表,您只需调用:

final_df = pd.concat(dfs, axis=1)

请注意,此解决方案将产生一个包含所有三个工作表的列标题的 final_df。所以,理想情况下它们是相同的。听起来您想合并信息,这会以不同的方式完成;如果没有更多信息,我们无法帮助您进行合并。

我希望这会有所帮助!

【讨论】:

以上是关于在 pandas 数据框中转换具有许多工作表(在 shett 名称中带有空格)的 excel 文件的主要内容,如果未能解决你的问题,请参考以下文章

python将多个excel中的所有工作表附加到pandas数据框中的有效方法

快速将 JSON 列转换为 Pandas 数据框

在转换为具有拆分方向的 json 之前从数据框中删除索引

pandas:在多索引数据框中转换索引类型

在 Pandas 数据框中按组过滤具有最小值的行 [重复]

如何在python的pandas数据框中输入单个值