在 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 文件的主要内容,如果未能解决你的问题,请参考以下文章