使用Pandas的pd.read_excel()方法读取同一工作簿中的多个工作表。
使用Pandas的pd.read_excel()方法读取同一工作簿中的多个工作表。
我有一个大的电子表格文件(.xlsx),我正在使用python pandas进行处理。我需要从该大文件中获取两个标签(工作表)的数据。其中一个标签具有大量数据,而另一个仅有几个方格。
当我在任何工作表上使用pd.read_excel()
时,它看起来像整个文件都已加载(不仅仅是我感兴趣的工作表)。因此,当我使用该方法两次(每个工作表一次)时,我实际上必须忍受整个工作簿被读入两次(即使我们只使用指定的工作表)。
我如何使用pd.read_excel()
仅加载指定的工作表?
有几个选项:
直接将所有工作表读入有序字典中。
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
自版本0.21.0起被弃用:请使用sheet_name代替 源链接
尝试使用pd.ExcelFile
:\n
xls = pd.ExcelFile('path_to_file.xls') df1 = pd.read_excel(xls, 'Sheet1') df2 = pd.read_excel(xls, 'Sheet2')
\n正如@HaPsantran所指出的,ExcelFile()
调用时会读取整个Excel文件(似乎没有绕过此方法的方式)。这仅仅是为了避免每次访问新表格时都要重新读取相同的文件。\n请注意,pd.read_excel()
的sheet_name
参数可以是表格的名称(如上所述),指定表格编号的整数(例如0、1等),表格名称或索引的列表,或None
。如果提供一个列表,它将返回一个字典,其中键是表格名称/索引,值是数据帧。默认情况下,只返回第一个表格(即sheet_name=0
)。\n如果指定None
,则会返回所有表格,作为一个{sheet_name:dataframe}
字典。