панды получают имена листов содержит ключевое слово

#python #python-3.x #pandas

Вопрос:

Я хочу объединить все листы, на которых есть строка «БРОНИРОВАНИЕ». Я уже искал такие документы, но доступных образцов нет. Кто-нибудь может мне помочь? Я знаю только, как прочитать название данного листа.

 import pandas as pd

file = 'test.xlsx'

df = pd.read_excel(File,sheet_name = 'JANUARY BOOKING')

print(df)
 

Ответ №1:

Вы можете попробовать это:

 import pandas as pd


file = 'test.xlsx'
keyword = 'BOOKING'

xls_file = pd.ExcelFile(file)
sheet_names = [sheet for sheet in xls_file.sheet_names if keyword.upper() in sheet.upper()]

dfs = pd.read_excel(file, sheet_name = sheet_names)
df = pd.concat([df.assign(sheet_name=name) for name, df in dfs.items()])

print(df)
 

Выход:

введите описание изображения здесь

Убедитесь openpyxl , что они установлены в вашей среде. Если нет, то используйте эту команду pip install openpyxl

Комментарии:

1. Стоит отметить, что этот способ также требует openpyxl выполнения pd.ExcelFile работы

2. @Sabil, если у тебя этого нет, ты получишь ImportError: Missing optional dependency 'openpyxl'. Use pip or conda to install openpyxl.

3. Я openpyxl установил в env

4. @Сабил. Это отмечено, есть ли способ отображать только определенный заголовок таблицы

5. Не могли бы вы, пожалуйста, добавить пример этого?

Ответ №2:

read_excel также примите список имен листов в качестве sheet_name аргумента. Таким образом, вы можете использовать openpyxl для анализа и фильтрации имен листов.

>>>>>> из openpyxl импортируйте load_workbook
>>>>>> имя файла = "your_sheet.xlsx"
>>>>>> wb = load_workbook(имя файла=имя файла)
>>>>>> list_of_sheetnames = [лист для листа в wb.имена листов, если >>>"БРОНИРОВАНИЕ" на листе]
>>>>>> df = pd.read_excel(имя файла,имя листа=>>>список имен таблиц)