我有两个字符串,我希望对它们进行单词标记化,然后比较它们的差异
s1 = 'one two shmoo'
s2 = 'one one two'
我的第一个想法是将它们都转换为collections.Counter
对象,将它们包装在pd.Series
中,然后减去它们之间的差异。
import pandas as pd
from collections import Counter
def counter_series(s):
return pd.Series(Counter(s.split(' ')))
counter_series(s2) - counter_series(s1)
但输出显示,这种差异不会提供两个字符串中都不存在的单词的计数:
one 1.0
shmoo NaN
two 0.0
dtype: float64
您如何才能包含缺少的计数?例如,在上面的输出中,shmoo
也应该是1。解决方案不一定要使用pandas
。
发布于 2018-06-25 21:19:21
在fill_value = 0
中使用sub
counter_series(s2).sub(counter_series(s1), fill_value=0)
输出:
one -1.0
shmoo 1.0
two 0.0
dtype: float64
并且,您可以添加.abs()来获取差值的绝对值:
counter_series(s2).sub(counter_series(s1), fill_value=0).abs()
输出:
one 1.0
shmoo 1.0
two 0.0
dtype: float64
但是,我会使用value_counts
而不是从集合中导入计数器。
def count_series(x):
s = pd.Series(x.split(' '))
return s.value_counts()
https://stackoverflow.com/questions/51031822
复制相似问题