2016-05-01 17 views
6

Ich habe dietransform scipy spärlich csr zu Pandas?

sklearn.preprocessing.OneHotEncoder 

verwendet, um einige Daten zu transformieren die Ausgabe scipy.sparse.csr.csr_matrix wie kann ich es wieder in meinen ursprünglichen Datenrahmen zusammen mit den anderen Spalten zusammenführen?

Ich versuchte pd.concat zu verwenden, aber ich

TypeError: cannot concatenate a non-NDFrame object 

Dank

Antwort

8

Wenn A csr_matrix ist, können Sie .toarray() (es gibt verwenden auch .todense(), die eine numpymatrix produziert, der auch arbeitet für die DataFrame ist Konstruktor):

df = pd.DataFrame(A.toarray()) 

Sie c Dann benutze das mit pd.concat().

A = csr_matrix([[1, 0, 2], [0, 3, 0]]) 

    (0, 0) 1 
    (0, 2) 2 
    (1, 1) 3 

<class 'scipy.sparse.csr.csr_matrix'> 

pd.DataFrame(A.todense()) 

    0 1 2 
0 1 0 2 
1 0 3 0 

<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 2 entries, 0 to 1 
Data columns (total 3 columns): 
0 2 non-null int64 
1 2 non-null int64 
2 2 non-null int64 

In der Version 0.20, pandassparse data structures eingeführt, die SparseDataFrame einschließlich.

Alternativ können Sie dünn besetzte Matrizen an sklearn übergeben, um zu vermeiden, dass bei der Konvertierung zurück in pandas der Arbeitsspeicher erschöpft ist. Konvertieren Sie einfach Ihre anderen Daten in ein spärliches Format, indem Sie einen numpyarray an den scipy.sparse.csr_matrix Konstruktor übergeben und scipy.sparse.hstack zum Kombinieren verwenden (siehe docs).

+0

Was kann ich tun, wenn mein A.toarray() zu einem MemoryError führt? Gibt es eine Möglichkeit, den Dataframe zu erstellen, ohne ihn in ein ndarray umzuwandeln? – user77005

+0

Vielleicht möchten Sie sich Pandas anschauen [spärliche Datenstrukturen] (https://pandas.pydata.org/pandas-docs/stable/sparse.html) – Stefan

1

Sie könnten auch vermeiden, eine dünn besetzte Matrix zu erhalten, indem Sie beim Erstellen des Encoders den Parameter sparse auf False setzen.

Die Dokumentation der OneHotEncoder Staaten:

spärlich: boolean, default = True

Wird Sparse Matrix zurück, wenn zurückkehren wird sonst ein Array True.

Dann können Sie den DataFrame-Konstruktor erneut aufrufen, um das numpy-Array in einen DataFrame umzuwandeln.

Verwandte Themen