Многопроцессорные панды read_excel в кадры данных - PullRequest
0 голосов
/ 24 октября 2018

У меня есть 6 .xlsx файлов.С помощью следующего кода я сохраняю один из них в фрейме данных с именем "df_documents":

df_documents = pd.read_excel(path_input+name_DOCUMENTSESSENTIAL+fileending_input,
                             names=column_DOCUMENTSESSENTIAL)

Из-за размера файла xlsx я провел некоторые исследования, чтобы ускорить его.Многопроцессорная обработка была подходящим способом:

def read_csv(filename):
return pd.read_excel('input/' + filename)


def main():

pool = Pool(processes=8)

files = os.listdir('input/')
file_list = [filename for filename in files if filename.split('.')[1] == 'xlsx']

df_list = pool.map(read_csv, file_list)

print(df_list)


if __name__ == '__main__':
main()

print("--- %s seconds ---" % (time.time() - start_time))

Как я могу получить доступ к различным фреймам данных из "return pd.read_excel"?Есть ли способ дать им конкретные имена?Мне известно, что у меня есть доступ к «df_list», но я не знаю, в каком файле находится какой фрейм данных df_list [число].

1 Ответ

0 голосов
/ 24 октября 2018

Что-то вроде этого, должно вернуть вам список кортежей.

Где первый элемент в каждом кортеже представляет имя файла, а второй - кадр данных.По сути, единственным отличием является оператор return в команде read_csv.

import pandas as pd
import numpy as np
import os
import time
from multiprocessing import Pool


def read_csv(filename):
    return (filename, pd.read_excel(os.path.join('input', filename))


def main():
    start_time = time.time()
    pool = Pool(processes=8)

    files = os.listdir('input')
    file_list = [filename 
                 for filename in files 
                 if filename.endswith('.xlsx')]

    df_list = pool.map(read_csv, file_list)

    print(df_list)
    print("--- %s seconds ---" % (time.time() - start_time))


if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...