Я хочу прочитать 22 файла (хранящихся на моем жестком диске), каждый из которых содержит около 300 000 строк для хранения в одном фрейме данных pandas
.Мой код смог это сделать за 15-25 минут.Первоначально я подумал: я должен сделать это быстрее, используя больше процессоров.( поправьте меня, если я ошибаюсь, и если все ЦП не могут считывать данные с одного и того же жесткого диска в одно и то же время, однако, в этом случае мы можем предположить, что в дальнейшем данные могут присутствовать на разных жестких дисках,так что это упражнение все еще полезно ).
Я нашел несколько постов типа this и this и попробовал код ниже.
import os
import pandas as pd
from multiprocessing import Pool
def read_psv(filename):
'reads one row of a file (pipe delimited) to a pandas dataframe'
return pd.read_csv(filename,
delimiter='|',
skiprows=1, #need this as first row is junk
nrows=1, #Just one row for faster testing
encoding = "ISO-8859-1", #need this as well
low_memory=False
)
files = os.listdir('.') #getting all files, will use glob later
df1 = pd.concat((read_psv(f) for f in files[0:6]), ignore_index=True, axis=0, sort=False) #takes less than 1 second
pool = Pool(processes=3)
df_list = pool.map(read_psv, files[0:6]) #takes forever
#df2 = pd.concat(df_list, ignore_index=True) #cant reach this
Это занимает вечность (более 30-60 минут, без завершения, когда я убиваю процесс).Я также прошел подобный вопрос, как мой , но бесполезный.
РЕДАКТИРОВАТЬ: Я использую Jupyter на Windows.