#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]
ключом? Номер столбца или какая — то строка?