Более быстрые альтернативы CSV и pandas - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть код дополнения данных, который требует добавления в CSV-файл. Данные в порядке миллионов. Это займет 2-3 дня. Есть ли более быстрые альтернативы? Насколько быстр HDF5 в случае, когда нам нужно добавить операции порядка миллионов?

Редактировать: код: только для справки

def insert_data(directory, annotated_csv, output_csv):
    data = pd.read_csv(annotated_csv)
    data.to_csv(output_csv,index = False)
    counter = 0
    print("number of files: ", len(os.listdir(directory)))

    datachunk = []

    for fname in glob.glob(directory + '/*jpg'):



        fname = fname.split('/')[-1]

        counter = counter + 1

        if counter % 10000 == 0:
            df_tmp = pd.DataFrame(data=datachunk, columns=data.columns)

            df_tmp.to_csv(output_csv,mode = 'a', index = False, header=False)

            datachunk = []

            print("counter: "+ str(counter))


        try:    
            ofile = fname.split("-")[0]
            flabel = "'" + fname.split("-")[3] + "'"

            ofile = ofile +'.jpg'

            BB, MB, SB = get_all_bb(data, ofile)

            BB[0] = fname
            MB[0] = fname
            SB[0] = fname

            BB[7] = flabel
            MB[7] = flabel
            SB[7] = flabel

            datachunk.append(BB)
            datachunk.append(MB)
            datachunk.append(SB)

        except:
            print("Exception on"+ str(fname))
            pass

    df_tmp = pd.DataFrame(data=datachunk, columns=data.columns)       
    df_tmp.to_csv(output_csv,mode = 'a', index = False, header=False)
    print("counter: "+ str(counter))

Этот код просто дает представление о том, что происходит.

1 Ответ

0 голосов
/ 19 февраля 2020

Использование простого pandas будет использовать только одно ядро ​​вашего процессора для вычислений.

Решение:

Вы можете использовать многопроцессорную обработку в сочетании с pandas, чтобы ускорить вычисление сложения. Используя многопроцессорность, вы сможете сократить время обработки в зависимости от количества ядер вашего процессора. Чем больше число ядер вашей машины, тем меньше время обработки.

Пример реализации многопроцессорной обработки с использованием pandas может быть передан по этой ссылке: http://datumorphism.com/til/programming/pandas/pandas-parallel-multiprocessing/

Для более подробного объяснения вы можете обратиться к: https://towardsdatascience.com/make-your-own-super-pandas-using-multiproc-1c04f41944a1

...