Наиболее эффективный способ добавления в dataframe и записи в csv в цикле - PullRequest
0 голосов
/ 12 февраля 2019

Я создаю фрейм данных из словаря, который постоянно обновляется в рамках вложенного цикла 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

Я надеялся снова запустить скрипт на той скорости, на которой он был вчера (примерно 30 секунд - 1 минута для диапазона 1000 во внешнем цикле).Сейчас это занимает 2 - 4 минуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...