Использование панд в pd.чтение excel() для нескольких листов одной книги
У меня есть большой файл электронных таблиц (.xlsx), что я обрабатываю с помощью python pandas. Бывает, что мне нужны данные из двух вкладок в этом большом файле. Одна из вкладок содержит массу данных, а другая-всего несколько квадратных ячеек.
когда я использую pd.read_excel () on любой рабочий лист, мне кажется, что весь файл загружен (а не только рабочий лист, который меня интересует). Поэтому, когда я использую метод дважды (один раз для каждого листа), я фактически должен страдать вся книга читается дважды (хотя мы используем только указанный лист).
Я использую его неправильно или это просто ограничено таким образом?
спасибо!
4 ответа:
попробовать
pd.ExcelFile
:xls = pd.ExcelFile('path_to_file.xls') df1 = pd.read_excel(xls, 'Sheet1') df2 = pd.read_excel(xls, 'Sheet2')
как отметил @HaPsantran, весь файл Excel считывается во время
ExcelFile()
вызов (кажется, нет способа обойти это). Это просто избавит вас от необходимости читать один и тот же файл каждый раз, когда вы хотите открыть новый лист.отметим, что до
pd.read_excel()
может быть имя листа (как указано выше), целое число, задающее номер листа (например, 0, 1 и т. д.), Список имен листов или индексы, илиNone
. Если список предоставлен, он возвращает словарь, где ключи-это имена/индексы листов, а значения-фреймы данных. По умолчанию нужно просто вернуть первый лист (т. е.sheet_name=0
).если
None
указано, все листы возвращаются, как{sheet_name:dataframe}
словарь.
есть 3 варианта:
- прочитайте первый лист непосредственно в dataframe
- прочитайте файл excel и получите список листов. Выберите и загрузите листы.
- прочитайте все листы и сохраните их в словаре.
Код:
import pandas as pd df = pd.read_excel('excel_file_path.xls') # this will read the first sheet into df 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, sheetname="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)
обновление:
# @ihightower pointed out in the comments that all sheets can be # directly read into an ordered dictionary in 1 step # 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)
обновление 2: Спасибо @toto_tico за указание на это.
sheetname: string, int, смешанный список строк/ints или нет, по умолчанию 0 Устаревшим, начиная с версии 0.21.0: вместо того, чтобы использовать sheet_name Ссылка На Источник