我有一个大的电子表格文件(.xlsx),我正在使用python熊猫处理。碰巧,我需要数据从两个选项卡(表)在那个大文件。其中一个选项卡包含大量数据,而另一个选项卡只有几个方形单元格。
当我在任何工作表上使用pd.read_excel()时,它看起来就像加载了整个文件(而不仅仅是我感兴趣的工作表)。因此,当我使用该方法两次(每个工作表一次)时,我实际上不得不忍受整个工作簿被读取两次(即使我们只使用指定的工作表)。
我如何只加载特定的表与pd.read_excel()?
我有一个大的电子表格文件(.xlsx),我正在使用python熊猫处理。碰巧,我需要数据从两个选项卡(表)在那个大文件。其中一个选项卡包含大量数据,而另一个选项卡只有几个方形单元格。
当我在任何工作表上使用pd.read_excel()时,它看起来就像加载了整个文件(而不仅仅是我感兴趣的工作表)。因此,当我使用该方法两次(每个工作表一次)时,我实际上不得不忍受整个工作簿被读取两次(即使我们只使用指定的工作表)。
我如何只加载特定的表与pd.read_excel()?
当前回答
你也可以使用表的索引:
xls = pd.ExcelFile('path_to_file.xls')
sheet1 = xls.parse(0)
将给出第一个工作表。第二张工作表:
sheet2 = xls.parse(1)
其他回答
pd.read_excel('filename.xlsx')
默认情况下,读取工作簿的第一张。
pd.read_excel('filename.xlsx', sheet_name = 'sheetname')
阅读练习册上的具体表格
pd.read_excel('filename.xlsx', sheet_name = None)
将所有工作表从excel读取到pandas数据帧作为OrderedDict的类型,意味着嵌套的数据帧,所有工作表作为数据帧收集在数据帧内,它的类型是OrderedDict。
你可以用下面几行来阅读所有的表格
import pandas as pd
file_instance = pd.ExcelFile('your_file.xlsx')
main_df = pd.concat([pd.read_excel('your_file.xlsx', sheet_name=name) for name in file_instance.sheet_names] , axis=0)
你也可以使用表的索引:
xls = pd.ExcelFile('path_to_file.xls')
sheet1 = xls.parse(0)
将给出第一个工作表。第二张工作表:
sheet2 = xls.parse(1)
有以下几种选择:
将所有表格直接读入有序字典。
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, string /int的混合列表,或None,默认为0 0.21.0版后已移除:使用sheet_name代替Source Link
是的,不幸的是,它总是加载完整的文件。如果重复执行此操作,最好提取表以分离csv,然后分别加载。您可以使用d6tstack自动化该过程,它还添加了其他功能,如检查所有工作表或多个Excel文件中的所有列是否相等。
import d6tstack
c = d6tstack.convert_xls.XLStoCSVMultiSheet('multisheet.xlsx')
c.convert_all() # ['multisheet-Sheet1.csv','multisheet-Sheet2.csv']
参见d6tstack Excel示例