Проблема с памятью при использовании python pandas для объединения стека данных в цикле - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь объединить множество фреймов данных, чтобы сделать корреляционную матрицу в pandas. Таким образом, мне кажется, что я должен продолжать добавлять столбцы справа, с «Дата» в качестве индекса. Но когда я пытаюсь выполнить эту функцию только с 50 кадрами данных, она заканчивается ошибкой памяти.

Кто-нибудь знает, что происходит?

def taking_and_combining_data_from_mysql_to_excel(root):

    saved_path = root + "\main_df.xlsx"

    main_df = pd.DataFrame()

    mycursor = mydb.cursor(buffered=True)

    for key, value in stock_dic.items():
        mycursor.execute("""SELECT date, Adj_close 
        FROM hk_stock 
        Where date >= '2020-03-13 00:00:00' and stock_number = '{}'""".format(key))

        row_result = mycursor.fetchall()
        df = pd.DataFrame(row_result) 
        df.columns = ['Date', value] 
        df.set_index('Date',inplace=True) 



        if main_df.empty:
            main_df = df

        else:
            main_df = main_df.join(df,how="outer")



    with pd.ExcelWriter(saved_path) as writer:  

        main_df.to_excel(writer,sheet_name="raw_data") 
        main_df.corr().to_excel(writer,sheet_name="correlation")  

    return main_df

1 Ответ

1 голос
/ 28 марта 2020

Pandas не предназначен для таких динамических c конкатенаций. Вы можете просто добавить вещи в список и преобразовать этот список в DataFrame. Вот так:

join=[]
for key, value in stock_dic.items():
    join.append({'Date':value} )
df_join=pd.DataFrame(join)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...