Как добавить кадр данных Modin pandas к другому? - PullRequest
1 голос
/ 15 июня 2019

Я работаю над выполнением вычислений для больших файлов по 6 ГБ каждого файла и наткнулся на Модин панд , которые, как я слышал, оптимизированы по сравнению с пандами.

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

Это прекрасно работает с Пандами . Но на обработку даже небольших файлов уходит слишком много времени. И я даже не могу представить это для 6GB файлов.

Однако, когда я пытаюсь сделать то же самое с модинами пандами, он не может добавить фрейм данных к большому фрейму данных, который я хочу преобразовать в csv файл.

Может кто-нибудь предложить какую-либо альтернативу этому или решение.

Python - 3.6
Pandas - 0.24.2
Modin Pandas - 0.5.2

код.

import modin.pandas as pd

def calculate_visit_prioritization(df):
    # calculations here
    return df

def get_all_data():
    big_df = pd.DataFrame()
    for df in pd.read_csv('./samp.csv', chunksize=50):
        big_df = big_df.append(calculate_visit_prioritization(df))
    big_df.to_csv('samps3.csv', index=False)

def main():
    get_all_data()

if __name__ == '__main__':
    main()

Ошибка при использовании Modin pandas для добавления фреймов данных.

UserWarning: DataFrame.append для пустого DataFrame по умолчанию реализация панд.

Файл "/Home/tony/.local/lib/python3.6/site-packages/pandas/core/reshape/concat.py", строка 289, в __init__ повышение TypeError (msg)

TypeError: невозможно объединить объект типа ""; только pd.Series, pd.DataFrame, и pd.Panel (устаревшие) объекты действительны

Я прошел по этой ссылке , где сказано, что функция .append() для панд частично (P) реализована в Модине.

1 Ответ

1 голос
/ 15 июня 2019

USP Модина заключается в том, что единственное различие между пандами и панами модинов - это оператор импорта. Чтобы объединить несколько DataFrames, используйте один вызов pd.concat вместо N append вызовов для повышения производительности.

df_list = []
for df in pd.read_csv('./samp.csv', chunksize=50):
    df_list.append(calculate_visit_prioritization(df))

big_df = pd.concat(df_list, ignore_index=True)
big_df.to_csv('samps3.csv', index=False)

Это также должно корректно обрабатывать пустые подкадры данных.

...