2017-01-29 12 views
2

私はX = vect.fit_transform(df.pop('Phrase')).toarray()に問題を抱えている私は、データフレームに疎行列(156060x11780)を変換したいが、私は、これは私のコードパンダのデータフレームメモリのpython

vect = TfidfVectorizer(sublinear_tf=True, analyzer='word', 
         stop_words='english' , tokenizer=tokenize, 
         strip_accents = 'ascii') 

X = vect.fit_transform(df.pop('Phrase')).toarray() 

for i, col in enumerate(vect.get_feature_names()): 
    df[col] = X[:, i] 

でメモリエラーを取得します。どうすれば解決できますか?

+0

はあなた 'X = vect.fit_transformため、この作業を行う(DFを.pop( 'Phrase'))。todense() '? – MaxU

+0

はありません:(私は –

+0

前にそれを試してみましたどのくらいのRAMで利用可能?:-)を助けるために喜んであなた – MaxU

答えて

3

これを試してみてください:

from sklearn.feature_extraction.text import TfidfVectorizer 
vect = TfidfVectorizer(sublinear_tf=True, analyzer='word', stop_words='english', 
         tokenizer=tokenize, 
         strip_accents='ascii',dtype=np.float16) 
X = vect.fit_transform(df.pop('Phrase')) # NOTE: `.toarray()` was removed 


for i, col in enumerate(vect.get_feature_names()): 
    df[col] = pd.SparseSeries(X[:, i].toarray().reshape(-1,), fill_value=0) 

UPDATE:私たちは、スパース配列から直接SparseDataFrameを構築することができ0.20+パンダのための

from sklearn.feature_extraction.text import TfidfVectorizer 
vect = TfidfVectorizer(sublinear_tf=True, analyzer='word', stop_words='english', 
         tokenizer=tokenize, 
         strip_accents='ascii',dtype=np.float16) 

df = pd.SparseDataFrame(vect.fit_transform(df.pop('Phrase')), 
         columns=vect.get_feature_names(), 
         index=df.index) 
+0

を使うのか? –

+0

@AmalKostaliTarghiは、それが仕事でしたthaaaaaaaaaaaaaaaaaaaaaaaaaaaaaank – MaxU

+0

ありがとうございます –