Эффективно создавайте разреженный кадр данных, когда обычный кадр данных слишком велик, чтобы поместиться в памяти

#python #pandas #dataframe #sparse-matrix #processing-efficiency

Вопрос:

Мне нужно создать разреженный кадр данных, который был бы слишком большим, чтобы поместиться в памяти, когда он не разрежен (более 150 ГБ в соответствии с ошибкой около 100 000 столбцов, хотя это более 99% 0s). Все, что я нашел, говорит мне только о том, как создать фрейм данных, который уже находится в памяти, но это мне не помогает. Я выяснил этот ужасно неэффективный цикл, который должен работать, но он работает уже 3 дня, и я не могу представить, что нет более быстрого способа сделать это.

 for i in range(len(m)):
    df = pd.concat([df, pd.DataFrame(m[i], index=[i])).fillna(0)
    df[df.columns[1:]] = df[df.columns[1:]].astype(pd.SparseDType('int', 0))#first column isn't sparse and contains str
df[df.columns[1:]].sparse.density #check density at end
 

m представляет собой список значений по умолчанию, каждое из которых представляет строку во фрейме данных. В некотором смысле, это уже то, что мне нужно, так как в нем не хранится 0 данных, но мне нужен фрейм данных для передачи в sklearn и другие библиотеки. Тестирование цикла на подмножестве m указывает на то, что я должен иметь возможность хранить весь кадр данных в памяти, пока он разрежен.

Комментарии:

1. Что является m[i] ключом? Номер столбца или какая — то строка?