我正在尝试使用pandas读取特定的Excel选项卡。但它正在读取第一个选项卡。

18 浏览
0 Comments

我正在尝试使用pandas读取特定的Excel选项卡。但它正在读取第一个选项卡。

我有一个大的电子表格文件(.xlsx),我正在使用Python pandas进行处理。碰巧我需要来自该大文件中的两个标签(工作表)的数据。其中一个标签有很多数据,另一个只有几个方形单元格。

当我在任何工作表上使用pd.read_excel()时,我觉得整个文件都被加载了(不仅仅是我感兴趣的工作表)。所以当我使用该方法两次(每次为一个标签),我必须忍受整个工作簿被读取两次(即使我们只使用指定的标签)。

我该如何使用pd.read_excel()仅加载特定的标签?

admin 更改状态以发布 2023年5月23日
0
0 Comments

有几个选项:

将所有工作表直接读入有序字典中。

import pandas as pd
# for pandas version >= 0.21.0
sheet_to_df_map = pd.read_excel(file_name, sheet_name=None)
# for pandas version < 0.21.0
sheet_to_df_map = pd.read_excel(file_name, sheetname=None)

将第一个工作表直接读入数据框中。

df = pd.read_excel('excel_file_path.xls')
# this will read the first sheet into df

读取Excel文件并获取工作表列表。然后选择和加载工作表。

xls = pd.ExcelFile('excel_file_path.xls')
# Now you can list all sheets in the file
xls.sheet_names
# ['house', 'house_extra', ...]
# to read just one sheet to dataframe:
df = pd.read_excel(file_name, sheet_name="house")

读取所有工作表并将其存储在字典中。与第一个选项相同,但更明确。

# to read all sheets to a map
sheet_to_df_map = {}
for sheet_name in xls.sheet_names:
    sheet_to_df_map[sheet_name] = xls.parse(sheet_name)
    # you can also use sheet_index [0,1,2..] instead of sheet name.

感谢@ihightower指出了读取所有工作表的方法,以及@toto_tico,@red-headphone指出的版本问题。

sheetname : string, int, mixed list of strings/ints, or None, default 0
Deprecated since version 0.21.0: Use sheet_name instead 源链接

0
0 Comments

尝试使用pd.ExcelFile

xls = pd.ExcelFile('path_to_file.xls')
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')

如@HaPsantran所指出的那样,在ExcelFile()调用期间会读取整个Excel文件(似乎没有绕过这一点的方法)。这只是让你省去每次访问新工作表时读取相同文件的操作。

请注意,pd.read_excel()sheet_name参数可以是工作表的名称(如上所述),也可以是指定工作表编号的整数(例如0、1等),也可以是工作表名称或索引的列表,或None。如果提供了列表,它会返回一个字典,其中键是工作表名称/索引,值是数据帧。默认情况下,只返回第一个工作表(即sheet_name=0)。

如果指定None,将返回所有工作表,作为{sheet_name:dataframe}字典。

0