首页 > 解决方案 > 使用 python pandas 在循环中加入股票 DataFrames 的内存问题

问题描述

我正在尝试加入很多数据框以便在熊猫中做相关矩阵。因此,似乎我必须继续在右侧添加列,以“日期”作为索引。但是,当我尝试仅使用 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

标签: pythonmysqlpandas

解决方案


Pandas不是为这种动态连接而设计的。您可以将内容附加到列表中,然后将该列表转换为 DataFrame。像这样:

join=[]
for key, value in stock_dic.items():
    join.append({'Date':value} )
df_join=pd.DataFrame(join)

推荐阅读