Почему происходит утечка данных pandas, пока я не вызову значения в кадре? - PullRequest
1 голос
/ 14 апреля 2020

У меня есть ситуация, когда у меня очень большой pandas фрейм данных, и большая часть обработки выполняется с типом данных float 16 из-за ограничений памяти. В какой-то момент процесса я сохраняю текущие результаты в кэш-памяти, а формат паркета требует float 32 - так что в этот момент я отключился. (На данный момент мои агрегированные данные могут помещаться в память.)

(для каждого столбца с плавающей запятой я делаю df [col] = df [col] .astype ('float32'))

У меня проблема в том, что после того, как я преобразовал все столбцы в float32; объем памяти, который оказался утечкой, точно соответствует размеру исходного кадра данных float16. Я не могу понять, как выпустить это.

В моем шатании; Я обнаружил способ вызвать аналогичную проблему (хотя и не совсем такую, как у меня)

df = pd.DataFrame(index=range(1024**3))
df[0] = 1.0
df.values.flags
df[0] = df[0].astype('float16')
# too much memory being utilized until the next line is called
df.values.flags

Если я опускаю df.values.flags в первый раз, утечка памяти не появляется. Если я вставлю это; утечка памяти остается, пока я не назову ее во второй раз. Я надеюсь, знание того, почему это происходит, поможет мне решить мою проблему, поскольку она очень похожа.

...