2016-04-14 17 views
1

私は4211行と1列を持つデータフレームdfを有する:python-pandasでデータフレームを高速に大きな行列に変換するには?

 bow 
0 [(6,1),(8,3),(9,1),...] 
1 [(1,1),(3,1),(10,1),...] 
2 [(9,2),(12,3),(13,1),...] 
... 

各行はbow文書およびリストを表すには、袋のワードに、word idその文書におけるそれらの対応occurrence timesありますフォーマット。例えば、最初の文書では、id 6の単語が1回発生し、id 8の単語が3回発生しました。全部で5000個の単語と4211個の文書があります。 今このデータフレームを * 5000のサイズの大きいdoc-wordマトリックスに変換したいと思います。 m_ij=nは、IDがiの単語がjn回出現することを示します。どうすれば速く実装できますか?前もって感謝します!

+0

私は一連の反復を試み、値を割り当てました。そして、ちょうど1,2秒かかった。 – user5779223

+0

あなたの質問に投稿したデータセットに望ましい出力を提供してください – MaxU

答えて

1

numpy配列に変換すると速度が上がります(ただし、タイプとサイズのデータ​​ではテストしていません)。

word idが1行に複数回表示されないとします。

# 1. allocating space for the output array: 
output_arr = np.zeros(shape = (len(df), 5000), dtype = int) 
# 2. converting DF to np.array (arr_df will be of shape (len(df),1)): 
arr_df = np.array(df) 
# 3. iterating: 
for i in range(len(arr_df)): 
    # arr_df[i] is a np.array containing a list so we have to use arr_df[i][0] to get to the tuples: 
    idx, values = zip(*arr_df[i][0]) 
    output_arr[i,idx] = val 
関連する問題