2024-04-25 21:05:31 发布
网友
我有一个包含字符串的pandas列。我想得到整个专栏中所有单词的字数。在不遍历每个值的情况下,最好的方法是什么?在
df = pd.DataFrame({'a': ['some words', 'lots more words', 'hi']})
在df['a']上运行时,应该得到6
df['a']
您可以使用vectorized string operations:
In [7]: df["a"].str.split().str.len().sum() Out[7]: 6
它来自
另一个使用cat字符串方法的选项。我们将把所有的线都弄碎然后分开数数
cat
len(df["a"].str.cat(sep=' ').split())
详细的测试数据
原始测试结果
df.a.str.extractall('(\w+)').count()[0]
这将提取a中每个单元格中的所有单词(与regex (\w+)匹配),并将它们放入一个新的框架中,如下所示:
a
(\w+)
然后,您可以对行执行count来获得单词数。在
count
请注意,如果需要,可以随时更改regex。例如,如果某些单词可能包含标点符号,则可以将单词定义为任意系列的非空白字符,并执行以下操作:
df.a.str.extractall('(\S+)').count()[0]
取而代之的是
编辑
如果您完全关心速度,请使用DSM的解决方案:
使用ipython的基本时间测试%timeit:
%timeit
%timeit df.a.str.extractall('(\S+)').count()[0] 1000 loops, best of 3: 1.28 ms per loop %timeit df["a"].str.split().str.len().sum() 1000 loops, best of 3: 447 µs per loop
您可以使用vectorized string operations:
它来自
^{pr2}$另一个使用
cat
字符串方法的选项。我们将把所有的线都弄碎然后分开数数详细的测试数据
^{pr2}$原始测试结果
这将提取
^{pr2}$a
中每个单元格中的所有单词(与regex(\w+)
匹配),并将它们放入一个新的框架中,如下所示:然后,您可以对行执行
count
来获得单词数。在请注意,如果需要,可以随时更改regex。例如,如果某些单词可能包含标点符号,则可以将单词定义为任意系列的非空白字符,并执行以下操作:
取而代之的是
编辑
如果您完全关心速度,请使用DSM的解决方案:
使用ipython的基本时间测试
%timeit
:相关问题 更多 >
编程相关推荐