Почему функции на основе панд внутри цикла for линейно растут во времени? - PullRequest
0 голосов
/ 10 декабря 2018

Я запускаю скрипт на Python 3.6, чтобы по существу проходить через пути к файлам и извлекать файлы .dbf (через цикл for), соответствующие двум наборам данных, которые затем используются для сравнения.В этом цикле for конкретный столбец преобразуется в числовой тип, поскольку он часто имеет формат строки, несмотря на то, что является числовым из-за пустых строк, в дополнение к удалению повторяющихся строк после того, как файл .dbf был обработан как кадр данных.Явно, это

df[col_name] = pd.to_numeric(df[col_name], errors = 'coerce')
df.drop_duplicates(keep="first",inplace=True)

Это работает как задумано.Однако, когда цикл for выполняется более 500 итераций, сообщаемое время выполнения для этих строк, по-видимому, линейно увеличивается со счетчиком итераций и занимает приблизительно одинаковое количество времени для выполнения (сумма этих двух значений отображается здесь ).Эта проблема возникает только с течением времени: когда мы останавливаем цикл и перезапускаем его на полпути, время выполнения для этих линий уменьшается до того, что должно быть, но затем снова начинает линейно увеличиваться.

ЭтоБыло подтверждено, что это строки кода, которые влияют на общее время выполнения - оно начнется примерно через 0,1 секунды, но затем после 600 итераций потребуется 45 секунд.Я пытался найти известные проблемы с функциями Pandas, которые приводили к такому поведению, но безрезультатно.Особенно интересно, что обе функции занимают примерно одинаковое время и увеличиваются с одинаковой скоростью.Кто-нибудь знает, почему возникает эта проблема?

Я пытался очищать фреймы данных в конце каждой итерации, а также выполнял сборку мусора и следил за использованием памяти.В настоящее время работает на машине 16 ГБ и не касается предела памяти.Временное исправление состоит в том, чтобы вручную настроить диапазон цикла и выполнить два запуска по отдельности, что не идеально.

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