DataFrame to Panel индексируется неуникальным столбцом с пандами - PullRequest
1 голос
/ 22 января 2012

Следующий код должен делать то, что я хочу, но он занимает 10 ГБ оперативной памяти к тому моменту, когда на 20% выполняется цикл.

# In [4]: type(pd)
# Out[4]: pandas.sparse.frame.SparseDataFrame
memid = unique(pd.Member)
pan = {}
for mem in memid:
    pan[mem] = pd[pd.Member==mem]
goal = pandas.Panel(pan)

1 Ответ

2 голосов
/ 22 января 2012

Я создал проблему GitHub здесь.

https://github.com/wesm/pandas/issues/663

Я почти уверен, что определил круговую ссылку между представлениями NumPy ndarray, вызывающую утечку памяти. Только что исправил:

https://github.com/wesm/pandas/commit/4c3916310a86c3e4dab6d30858a984a6f4a64103

Можете ли вы установить из исходного кода и сообщить мне, если это решит вашу проблему?

Кстати, вы можете попробовать использовать SparsePanel вместо Panel, поскольку Panel преобразует все вложенные фреймы в плотную форму.

Наконец, вы можете рассмотреть возможность использования groupby в качестве альтернативы O(N * M) измельчению SparseDataFrame. Еще короче:

pan = dict(pd.groupby('Member'))

...