Ser*_*gei 14 python dataframe pandas
假设我们有简单的Dataframe
df = pd.DataFrame(['one apple','banana','box of oranges','pile of fruits outside', 'one banana', 'fruits'])
df.columns = ['fruits']
Run Code Online (Sandbox Code Playgroud)
如何计算关键词中的单词数,类似于:
1 word: 2
2 words: 2
3 words: 1
4 words: 1
Run Code Online (Sandbox Code Playgroud)
EdC*_*ica 22
那么IIUC你可以做到以下几点:
In [89]:
count = df['fruits'].str.split().apply(len).value_counts()
count.index = count.index.astype(str) + ' words:'
count.sort_index(inplace=True)
count
Out[89]:
1 words: 2
2 words: 2
3 words: 1
4 words: 1
Name: fruits, dtype: int64
Run Code Online (Sandbox Code Playgroud)
这里我们使用矢量化str.split
分割空格,然后得到元素数量的计数,然后我们可以调用聚合频率计数.apply
len
value_counts
然后,我们重命名索引并对其进行排序以获得所需的输出
UPDATE
这也可以使用str.len
而不是apply
哪个应该更好地扩展:
In [41]:
count = df['fruits'].str.split().str.len()
count.index = count.index.astype(str) + ' words:'
count.sort_index(inplace=True)
count
Out[41]:
0 words: 2
1 words: 1
2 words: 3
3 words: 4
4 words: 2
5 words: 1
Name: fruits, dtype: int64
Run Code Online (Sandbox Code Playgroud)
计时
In [42]:
%timeit df['fruits'].str.split().apply(len).value_counts()
%timeit df['fruits'].str.split().str.len()
1000 loops, best of 3: 799 µs per loop
1000 loops, best of 3: 347 µs per loop
Run Code Online (Sandbox Code Playgroud)
对于6K df:
In [51]:
%timeit df['fruits'].str.split().apply(len).value_counts()
%timeit df['fruits'].str.split().str.len()
100 loops, best of 3: 6.3 ms per loop
100 loops, best of 3: 6 ms per loop
Run Code Online (Sandbox Code Playgroud)
您可以将str.count
空格' '
用作分隔符。
In [1716]: count = df['fruits'].str.count(' ').add(1).value_counts(sort=False)
In [1717]: count.index = count.index.astype('str') + ' words:'
In [1718]: count
Out[1718]:
1 words: 2
2 words: 2
3 words: 1
4 words: 1
Name: fruits, dtype: int64
Run Code Online (Sandbox Code Playgroud)
时机
str.count
快一点
小
In [1724]: df.shape
Out[1724]: (6, 1)
In [1725]: %timeit df['fruits'].str.count(' ').add(1).value_counts(sort=False)
1000 loops, best of 3: 649 µs per loop
In [1726]: %timeit df['fruits'].str.split().apply(len).value_counts()
1000 loops, best of 3: 840 µs per loop
Run Code Online (Sandbox Code Playgroud)
介质
In [1728]: df.shape
Out[1728]: (6000, 1)
In [1729]: %timeit df['fruits'].str.count(' ').add(1).value_counts(sort=False)
100 loops, best of 3: 6.58 ms per loop
In [1730]: %timeit df['fruits'].str.split().apply(len).value_counts()
100 loops, best of 3: 6.99 ms per loop
Run Code Online (Sandbox Code Playgroud)
大
In [1732]: df.shape
Out[1732]: (60000, 1)
In [1733]: %timeit df['fruits'].str.count(' ').add(1).value_counts(sort=False)
1 loop, best of 3: 57.6 ms per loop
In [1734]: %timeit df['fruits'].str.split().apply(len).value_counts()
1 loop, best of 3: 73.8 ms per loop
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16083 次 |
最近记录: |