我试图在numpy中使用split函数,如下所示:
desc = np.array(['Alu Bokhara','Kurma Polao'])
然后我尝试从数组中的每个元素中提取并打印第一个单词,如下所示:
np.array([np.split(i,' ')[0] for i in desc])
然后我收到错误:
tuple index out of range
有关此问题的任何提示吗?
由于
答案 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)