筛选字符串数组

2024-09-30 01:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的数据集从推特。我正试图弄清楚如何执行类似于下面numpy中的python过滤。环境是python解释器

>>tweets = [['buhari si good'], ['atiku is great'], ['buhari nfd sdfa atiku'], 
         ['is nice man that buhari']]
>>>filter(lambda x: 'buhari' in x[0].lower(), tweets) 
[['buhari si good'], ['buhari nfd sdfa atiku'], ['is nice man that buhari']]

我试过像下面这样的布尔索引,但是数组变成空的

^{pr2}$

我想知道如何在numpy数组中过滤字符串,就像我在这里很容易过滤偶数的方法一样

>>> arr = np.arange(15).reshape((15,1))
>>>arr
array([[ 0],
   [ 1],
   [ 2],
   [ 3],
   [ 4],
   [ 5],
   [ 6],
   [ 7],
   [ 8],
   [ 9],
   [10],
   [11],
   [12],
   [13],
   [14]])
>>>arr[:][arr % 2 == 0]
array([ 0,  2,  4,  6,  8, 10, 12, 14])

谢谢


Tags: numpythatis数组arraytweetsgoodnice
1条回答
网友
1楼 · 发布于 2024-09-30 01:22:20

如果你想坚持一个完全基于NumPy的解决方案,你可以这么做

from numpy.core.defchararray import find, lower
tweet_arr[find(lower(tweet_arr), 'buhari') != -1]

您在评论中提到,您在这里需要的是性能,因此应该注意的是,这似乎比您自己提出的解决方案慢得多:

^{pr2}$

事实上,普通的列表理解胜过两种方法:

In [44]: %timeit [x for x in large_arr if 'buhari' in x.lower()]
18.5 ms ± 102 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

相关问题 更多 >

    热门问题