附加到数据帧并在循环内写入CSV的最有效方法

时间:2019-02-12 18:46:48

标签: python pandas performance dataframe dictionary

我正在从一个字典创建一个数据帧,该字典在嵌套的for循环中不断更新。

随着每个信号的发出,数据帧在具有全零的任何行中进行条带化,并使用新的索引进行重组。

数据帧最终被写到一个csv文件中,并在每次内部循环触发时附加到该文件中。

我的问题是python脚本的速度变得非常慢。很好,直到昨天我不得不重新安装python为止。

我发现从数据帧的任何行中删除零都是造成速度问题的原因。

“ test = pd.DataFrame(list(q_table.values()))”上方的注释行是删除所有全为零的行的原始代码。

脚本的速度受到严重影响,所以我用新的一行代码替换了它。

用于删除零的新代码行提高了速度,但速度却没有以前快。

for e in range(100):

    for _ in range(20):
        # To remove a row with all zero values in a dataframe
        # Every terminal state was adding a new row with all zero  values
        # Adapted from https://stackoverflow.com/questions/20490274/how-to-reset-index-in-a-pandas-data-frame
        # Adapted from https://stackoverflow.com/questions/22649693/drop-rows-with-all-zeros-in-pandas-data-frame

        #df = test[(test.T != 0).any()].reset_index(drop=True)

        test = pd.DataFrame(list(q_table.values()))
        test = test[~(test==0).all(axis=1)].reset_index(drop=True)

        with open('static/Dataframe.csv', 'a', newline ="") as f1:

            f1.write(test.to_csv(header=None))

            f1.close()

        if done:
            break

我希望让脚本恢复到昨天的速度(外循环上范围1000大约30秒-1分钟)。 此刻需要2-4分钟。

0 个答案:

没有答案