numpy split error - 数组的索引太多了

时间:2017-01-11 08:38:07

标签: numpy

我试图在numpy中使用split函数,如下所示:

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

然后我尝试从数组中的每个元素中提取并打印第一个单词,如下所示:

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

然后我收到错误:

tuple index out of range

有关此问题的任何提示吗?

由于

2 个答案:

答案 0 :(得分:2)

作为替代矢量化方法,您可以使用np.core.defchararray.split -

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

基本上,我们基于space character拆分每个元素,从而将每个子列表中的单词分开,然后简单地从每个子元素中选择第一个元素列表

示例运行 -

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 :(得分: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)