2017-01-11 10 views
2

ためにあまりにも多くのインデックス:numpyのスプリットエラー - 私は次のようにnumpyの内、スプリット機能を使用しようとしています配列

desc = np.array(['Alu Bokhara','Kurma Polao']) 

その後、私はのように、配列内の各要素からの最初の単語を抽出して印刷しようとしています次の:

tuple index out of range 

この問題をめぐるどれヒント:

np.array([np.split(i,' ')[0] for i in desc]) 

は、その後、私はエラーを取得していますか?基本的に、我々はこのようにサブリストで単語を分離し、space characterに基づいて、各要素を分割している

[i[0] for i in np.core.defchararray.split(desc, sep=' ')] 

-

おかげ代替ベクトル化のアプローチとして

+0

np.splitアレイのためのものです。 i.split()は、配列の要素である文字列を表します。 – hpaulj

答えて

2

は、あなたがnp.core.defchararray.splitを使用することができますそれぞれを入力してからサブリストの最初の要素を選択するだけです。

サンプル実行 -

In [117]: desc 
Out[117]: 
array(['Alu Bokhara', 'Kurma Polao'], 
     dtype='|S11') 

In [118]: [i[0] for i in np.core.defchararray.split(desc, sep=' ')] 
Out[118]: ['Alu', 'Kurma'] 

ランタイムテスト -

In [142]: desc = np.array(['Then I', 'am trying to' ,'extract and', 'print',\ 
    ...:  'the first word from each', 'element within the', 'array']) 

In [143]: %timeit pd.Series(desc).str.split().str[0].values #@piRSquared's soln 
1000 loops, best of 3: 509 µs per loop 

In [144]: %timeit [i[0] for i in np.core.defchararray.split(desc, sep=' ')] 
100000 loops, best of 3: 13.8 µs per loop 
1

あなたはpandasを使用することができます。これは、配列を分割して戻すためにpandas.Seriesを使用する例です。

import pandas as pd 

np.array(pd.Series(desc).str.split().tolist()) 

array([['Alu', 'Bokhara'], 
     ['Kurma', 'Polao']], 
     dtype='<U7') 

ちょうど最初の単語について

pd.Series(desc).str.split().str[0].values 

array(['Alu', 'Kurma'], dtype=object) 
関連する問題