Как переиндексировать маленький, плотный фрейм данных Python Pandas в большой, разреженный фрейм данных без проблем со скоростью или памятью? - PullRequest
0 голосов
/ 20 апреля 2019

У меня плотный фрейм данных.Я хочу переиндексировать это.Это делает фрейм данных очень большим и разреженным.Поэтому я мог бы

1) сначала переиндексировать, а затем сделать его разреженным.Но для этого требуется слишком много памяти (в моем случае размер данных составляет от 50 миллионов до 5 миллиардов строк).

2) делает его разреженным, а затем переиндексирует.Но это очень медленно.

Полагаю, мой лучший шанс - сделать промежуточный шаг через scipy.sparse.Поэтому создайте матрицу scipy.sparse из моего плотного фрейма данных.Затем создайте разреженный фрейм данных из матрицы scipy.sparse.Но это кажется нелегким.

Есть ли способ напрямую переиндексировать плотный фрейм данных панд в большой, разреженный фрейм данных панд, не сталкиваясь ни со скоростью, ни с проблемами памяти?

Вот стилизованные версии 1) и 2):

import pandas as pd
import numpy as np

small_index = range(100)
large_index = range(10**6)

df = pd.DataFrame(np.random.randn(100,100), index=small_index)

# bad because it's slow
%timeit df1 = df.to_sparse().reindex(large_index)

# bad because it requires a lot of memory
%timeit df2 = df.reindex(large_index).to_sparse()

Работает на Win 10, python 3.6.8, pandas 0.24.2

...