Намирам, че разредените версии на рамка от данни всъщност са много по-големи, когато се записват на диск, отколкото плътните версии. какво правя грешно
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
Това са данни, които като списък с индекси в .mat файл на Matlab са по-малко от 12M. Бях нетърпелив да го прехвърля във формат 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