我想用Dimonson 250.000 x 250.000创建一个熊猫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
...


后面的句子描述了在这种情况下使用熊猫的问题?我真的很想在这种情况下继续使用熊猫,但是在这种情况下完全不可能!

有人有一个想法,如何更有效地解决这个问题?
我的下一个想法是使用诸如嵌套列表/字典之类的东西。

谢谢你的帮助!

最佳答案

这样做

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的字典,它们本身是不可变的。Sparseness将在0.12中进行一些更改以更好地支持这些类型的操作(例如,设置有效地工作)。

07-27 16:11