Python эффективный способ добавить все рабочие листы в нескольких Excel в панде dataframe - PullRequest
1 голос
/ 16 апреля 2019

У меня около 20 ++ файлов xlsx, внутри каждого файла xlsx может быть разное количество рабочих листов.Но, слава богу, все столбцы - некоторые во всех таблицах и во всех файлах xlsx.Ссылаясь на здесь", я получил некоторую идею. Я пытался несколькими способами импортировать и добавлять все файлы Excel (все рабочие таблицы) в один фрейм данных (около 4 миллионов строк записей).

Примечание: я также проверил здесь", но он включает в себя только уровень файла, файл моих копий и до уровня листа.

Я пробовал ниже код

# import all necessary package
import pandas as pd
from pathlib import Path
import glob
import sys

# set source path
source_dataset_path = "C:/Users/aaa/Desktop/Sample_dataset/"
source_dataset_list = glob.iglob(source_dataset_path + "Sales transaction *")

for file in source_dataset_list:
#xls = pd.ExcelFile(source_dataset_list[i])
    sys.stdout.write(str(file))
    sys.stdout.flush()
    xls = pd.ExcelFile(file)
    out_df = pd.DataFrame() ## create empty output dataframe

    for sheet in xls.sheet_names:
        sys.stdout.write(str(sheet))
        sys.stdout.flush() ## # View the excel files sheet names
        #df = pd.read_excel(source_dataset_list[i], sheet_name=sheet)
        df = pd.read_excel(file, sheetname=sheet)
        out_df = out_df.append(df)  ## This will append rows of one dataframe to another(just like your expected output)

Вопрос:

Мой подход - сначала прочитать каждый файл Excel и получить список листов внутри него, затем загрузить листы и добавить все листы.Циклирование кажется не очень эффективным, особенно когда увеличение размера данных для каждого добавления.

Есть ли другой эффективный способ импорта и добавления всех листов из нескольких файлов Excel?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Используйте sheet_name=None в read_excel для обратного порядка заказов для фреймов данных, созданных из всех имен листов, затем объедините с помощью concat и последний DataFrame.append к финалу DataFrame:

out_df = pd.DataFrame()
for f in source_dataset_list:
    df = pd.read_excel(f, sheet_name=None)
    cdf = pd.concat(df.values())
    out_df = out_df.append(cdf,ignore_index=True)

Другое решение:

cdf = [pd.read_excel(excel_names, sheet_name=None).values() 
            for excel_names in source_dataset_list]

out_df = pd.concat([pd.concat(x) for x in cdf], ignore_index=True)
1 голос
/ 16 апреля 2019

Если я правильно понимаю вашу проблему, установите sheet_name=None в pd.read_excel, добивайтесь цели.

import os
import pandas as pd

path = "C:/Users/aaa/Desktop/Sample_dataset/"

dfs = [
    pd.concat(pd.read_excel(path + x, sheet_name=None))
    for x in os.listdir(path)
    if x.endswith(".xlsx") or x.endswith(".xls")
]

df = pd.concat(dfs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...