我正在尝试从数据帧列创建单词标记集和单词计数字典。
df = pd.DataFrame({'a':[11,11,11,12,12,12], 'b':['The Effect','effective than','more','more','bark oola','a'], 'c': [1,2,3,5,6,9]})
我现在使用代码
从列'b'创建令牌set(list(itertools.chain.from_iterable(df.b.str.split())))
这是最有效的方法吗?
如果我需要字典中的标记和计数(特定标记在列中出现的时间数)该怎么办
您可以将str.join
与str.split
一起使用,然后转换为set
set(' '.join(df['b']).split())
# {'Effect', 'The', 'a', 'bark', 'effective', 'more', 'oola', 'than'}
可以先用Series.explode
,再用Series.unique
df['b'].str.split().explode().unique()
# array(['The', 'Effect', 'effective', 'than', 'more', 'bark', 'oola', 'a'],
# dtype=object)
timeit
s
基准测试设置
s = pd.Series(['this', 'many strings', 'all are humans']*500)
s.append(['again some more random', 'foo bar']*500)
In [43]: %%timeit
...: s.str.split().explode().unique()
...:
...:
1.46 ms ± 4.66 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [44]: %%timeit
...: set(list(itertools.chain.from_iterable(s.str.split())))
...:
...:
776 µs ± 4.98 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [49]: %timeit np.unique(s.str.split().explode())
2.48 ms ± 62.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [64]: %timeit set(' '.join(s).split())
292 µs ± 20.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)