Я обнаружил, что разреженные версии фрейма данных на самом деле намного больше при сохранении на диск, чем плотные версии. Что я делаю не так?
test = pd.DataFrame(ones((4,4000)))
test.ix[:,:] = nan
test.ix[0,0] = 47
test.to_hdf('test3', 'df')
test.to_sparse(fill_value=nan).to_hdf('test4', 'df')
test.to_pickle('test5')
test.to_sparse(fill_value=nan).to_pickle('test6')
....
ls -sh test*
200K test3 16M test4 164K test5 516K test6
Использование версии 0.12.0
В конечном итоге я хотел бы эффективно хранить массивы 10 ^ 7 на 60 с плотностью около 10%, а затем вставлять их в кадры данных Pandas и играть с ними.
Изменить: спасибо Джеффу за ответ на исходный вопрос. Дополнительный вопрос: похоже, это дает экономию только при травлении, а не при использовании других форматов, таких как HDF5. Маринование — мой лучший маршрут?
print shape(array_activity) #This is just 0s and 1s
(1020000, 60)
test = pd.DataFrame(array_activity)
test_sparse = test.to_sparse()
print test_sparse.density
0.0832333496732
test.to_hdf('1', 'df')
test_sparse.to_hdf('2', 'df')
test.to_pickle('3')
test_sparse.to_pickle('4')
!ls -sh 1 2 3 4
477M 1 544M 2 477M 3 83M 4
Это данные, которые в виде списка индексов в файле Matlab .mat составляют менее 12 МБ. Мне очень хотелось перевести его в формат HDF5/Pytables, чтобы я мог захватить только определенные индексы (другие файлы намного больше, и их загрузка в память занимает гораздо больше времени), а затем легко делать с ними вещи Pandasy. Может быть, я не иду об этом правильно?
TypeError: cannot properly create the storer for: [_TABLE_MAP] [group->/test_sparse (Group) '',value-><class 'pandas.sparse.frame.SparseDataFrame'>,table->True,append->True,kwargs->{'encoding': None}]
- person jeffalstott   schedule 07.02.2014