2017-06-28 7 views
0

Ich mache einige grundlegende maschinelles Lernen und haben eine Sparse Matrix aus TFIDF führt, wie folgt:Pandas: Verketten von Datenrahmen mit Sparse Matrix

<983x33599 sparse matrix of type '<type 'numpy.float64'>' 
    with 232944 stored elements in Compressed Sparse Row format> 

Dann habe ich eine Datenrahmen mit einer title Spalte. Ich möchte diese in einem DataFrame kombinieren, aber wenn ich versuche, concat zu verwenden, bekomme ich, dass ich einen DataFrame mit einem Nicht-DataFrame-Objekt nicht kombinieren kann.

Wie kann ich das umgehen?

Danke!

Antwort

0

Vielleicht können Sie versuchen, auf der Sparse-Matrix vor der Verkettung zu verwenden, und später zurück in eine Sparse-Matrix mit to_sparse() konvertieren. Ich hoffe es hilft.

0

Betrachten Sie die folgende Demo:

Quelle DF:

In [2]: df 
Out[2]: 
        text 
0  is it good movie 
1 wooow is it very goode 
2    bad movie 

Lösung: Lassen Sie uns einen SparseDataFrame aus TFIDF Sparse Matrix erstellen:

from sklearn.feature_extraction.text import TfidfVectorizer 

vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', stop_words='english') 

sdf = pd.SparseDataFrame(vect.fit_transform(df['text']), 
         columns=vect.get_feature_names(), 
         default_fill_value=0) 
sdf['text'] = df['text'] 

Ergebnis:

In [13]: sdf 
Out[13]: 
    bad good  goode  wooow     text 
0 0.0 1.0 0.000000 0.000000  is it good movie 
1 0.0 0.0 0.707107 0.707107 wooow is it very goode 
2 1.0 0.0 0.000000 0.000000    bad movie 

In [14]: sdf.memory_usage() 
Out[14]: 
Index 80 
bad  8 
good  8 
goode  8 
wooow  8 
text  24 
dtype: int64 

P Achten Sie auf .memory_usage() - wir haben die "Schärfe" nicht verloren. Wenn wir pd.concat, join, merge usw. verwenden würden, würden wir die "Spärlichkeit" verlieren, da alle diese Methoden eine neue reguläre (nicht abgespeckte) Kopie der zusammengeführten Datenrahmen

erzeugen
Verwandte Themen