我想用Dimonson 250.000 x 250.000创建一个pandas SparseDataFrame。最后,我的目标是提出一个大的邻接矩阵。
到目前为止,创建该数据框没有问题:
df = SparseDataFrame(columns=arange(250000), index=arange(250000))
但是当我尝试更新DataFrame时,我变成了大量的内存/运行时问题:
index = 1000
col = 2000
value = 1
df.set_value(index, col, value)
我检查了来源:
def set_value(self, index, col, value):
"""
Put single value at passed column and index
Parameters
----------
index : row label
col : column label
value : scalar value
Notes
-----
This method *always* returns a new object. It is currently not
particularly efficient (and potentially very expensive) but is provided
for API compatibility with DataFrame
...
后一句话描述了这种情况下使用熊猫的问题?在这种情况下,我真的想继续使用熊猫,但在这种情况下完全不可能!
有人有想法,如何更有效地解决这个问题? 我的下一个想法是使用类似嵌套列表/ dicts的东西......
感谢您的帮助!
答案 0 :(得分:3)
这样做
df = pd.SparseDataFrame(columns=np.arange(250000), index=np.arange(250000))
s = df[2000].to_dense()
s[1000] = 1
df[2000] = s
In [11]: df.ix[1000,2000]
Out[11]: 1.0
所以程序是一次换掉整个系列。 SDF会将传入的系列转换为SparseSeries。 (你可以自己动手看看它们与s.to_sparse()
的相似之处.SparseDataFrame基本上是这些SparseSeries的一个字典,它们本身是不可变的。稀疏性将在0.12中有一些变化,以更好地支持这些类型的操作(例如设置将有效工作)。