2

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
...

後者の文は、パンダを使用してこの場合の問題を説明していますか? この場合、パンダを使い続けたいのですが、この場合はまったく不可能です!

誰かがこの問題をより効率的に解決する方法を知っていますか? 私の次のアイデアは、ネストされたリスト/ディクテーションなどを扱うことです...

ご協力いただきありがとうございます!

4

1 に答える 1

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 に変換します。SparseDataFrames.to_sparse()は、基本的にこれらの SparseSeries の辞書であり、それ自体は不変です。0.12 では、これらのタイプの操作をより適切にサポートするために、Sparseness にいくつかの変更が加えられます (たとえば、設定は効率的に機能します)。 .

于 2013-05-16T11:27:20.437 に答える