2016-12-14 7 views
1

パンダSparseDataFramescipy.sparse.csc_matrixに変換します。しかし、私は最初に高密度マトリックスに変換したくない。Pandas SparseDataframeをScipyに変換します。csc_matrix

今私は以下のようなものがあります。

df = pd.get_dummies(df, sparse=True) 

は基本的に私は必要なもの、さらにdfからscipy.sparse.csc_matrixを取得することです。それを行う方法はありますか?

答えて

0

私はさまざまな疎なパンダに参加して、疎遠な質問をしています。

http://pandas-docs.github.io/pandas-docs-travis/sparse.html#interaction-with-scipy-sparse

しかし参照Pandas sparse dataFrame to sparse matrix, without generating a dense matrix in memory スパースへのデータフレームのための:

COOマトリックスにマルチインデックススパースシリーズを変換するためのパンダの方法があります。あなたがcoo行列ができたら

How do I create a scipy sparse matrix from a pandas dataframe?

そして最近、How can I "sparsify" on two values?

、あなたは簡単にcsrcscに変換することができます。

混乱を避けるために、サンプルデータフレームを作成し、高密度に変換してからスパースに変換することをお勧めします。テストするための具体的なことがあること。私は、MultiIndexがDataFrameとは異なることを認識せずに、Pandasメソッドを推薦しました。

+0

返信いただきありがとうございます@hpaulj。私があなたを正しく理解していれば、最良のアプローチは[メモリ内に密な行列を生成せずに、[Pandas sparse dataFrame to sparse matrix]」(http://stackoverflow.com/questions/31084942/pandas-sparse-dataframe-to-sparse- m-dense-matrix-in-m)である。右? –

1

@ hpauljさんの返答に感謝します。私はhttps://stackoverflow.com/a/38157234/7298911のテンプレートを使用してそれを終了しました。

変更された実装がここにあります。

def sparseDfToCsc(df): 
    columns = df.columns 
    dat, rows = map(list,zip(*[(df[col].sp_values-df[col].fill_value, df[col].sp_index.to_int_index().indices) for col in columns])) 
    cols = [np.ones_like(a)*i for (i,a) in enumerate(dat)] 
    datF, rowsF, colsF = np.concatenate(dat), np.concatenate(rows), np.concatenate(cols) 
    arr = sparse.coo_matrix((datF, (rowsF, colsF)), df.shape, dtype=np.float64) 
    return arr.tocsc() 

df = pd.get_dummies(df, sparse=True) 
cscMatrix = sparseDfToCsc(df) 
関連する問題