Как извлечь содержимое листа из таблиц Excel на основе определенных строковых значений - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу просмотреть множество файлов Excel в одной папке и извлечь информацию, содержащуюся в определенных вкладках, только если эти вкладки содержат определенное строковое значение. Так, например, одна электронная таблица может иметь 20 вкладок, но мне нужна только вкладка (и ее информация), которая содержит строку «Яблоки» где-то на этой вкладке. (Похоже, он всегда находится в первом ряду). Затем я хочу объединить все эти вкладки в одну электронную таблицу. Эта проблема уникальна из предыдущих вопросов SO, потому что мои вкладки не имеют одинакового имени. Иногда вкладка, которую я хочу, называется «Яблочный соус», а иногда - «Apple Jacks». Вот почему мне нужно искать строку в самой вкладке, и я не могу полагаться только на указание имени листа.

На данный момент я написал следующий код:

    import pandas as pd
    import os

    root = r"my_dir"

    agg_df = pd.DataFrame()

    for directory, subdirectory, files in os.walk(root):
        for file in files:
            if file.endswith('.xlsm'):
                filepath = os.path.join(directory, file)
# I want to do some kind of if statement here maybe to say if sheet_name.contains("Apples")
                df_temp = pd.read_excel(filepath)
                df_temp['Filepath'] = filepath
                agg_df = agg_df.append(df_temp)

1 Ответ

0 голосов
/ 19 апреля 2019

Вы можете использовать модуль re вместе с функцией ExcelFile, чтобы прочитать имена листов и перебрать их, чтобы прочитать каждый лист, который соответствует определенным критериям регулярных выражений.

import pandas as pd
import os
import re

root = r"Directory_path"

agg_df = pd.DataFrame()

for directory, subdirectory, files in os.walk(root):
    for file in files:
        if file.endswith('.xlsm'):
            filepath = os.path.join(directory, file)
            xls = pd.ExcelFile(filepath)
            for i in xls.sheet_names:
                if re.search(r'Apple', i):
                    df_temp = pd.read_excel(filepath, sheet_names=i)
                    #Continue the data processing that you want to carry on here and append the result to a dataframe
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...