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