计算文本列中两个单词出现次数的两种方法

时间:2019-02-07 04:15:54

标签: python pandas kaggle

我是熊猫新手,现在正在Kaggle上学习。

这是一个练习,要求在描述列中查找两个单词的出现次数。

我从stackoverflow找到了第一个语句,但是第二个是正确的答案。产生这种不同结果的原因是什么? 谢谢!!!

1。从stackoverflow找到

tropical = reviews.description.str.count("tropical").sum()
fruity = reviews.description.str.count("fruity").sum()
descriptor_counts = pd.Series([tropical,fruity])

`

2。正确答案

tropical = reviews.description.map(lambda desc: 'tropical' in desc).sum()
fruity = reviews.description.map(lambda desc: 'fruity' in desc).sum()
descriptor_counts = pd.Series([tropical, fruity],index=['tropical','fruity'])

第一个结果是[3703, 9259] 第二个结果是[3607, 9090]

更新!最初的问题是: 创建一个Series descriptor_counts,计算这两个单词中每个单词出现在数据集的描述栏中的次数。

3 个答案:

答案 0 :(得分:1)

第一个比较少,因为它只获取 'tropical''fruity'的值。

所以:

>>> s='a'
>>> s=='a'
True

但是第二个是获取包含 'tropical''fruity'的值,因此上面的内容:

>>> s='ab'
>>> s=='a'
False

它确实如此:

>>> s='ab'
>>> 'a' in s
True

答案 1 :(得分:0)

这是一个例子

enter image description here

第一个代码将热带计算为5,将水果计算为4。它计算相同描述中单词的重复。 因此,在此示例中,结果将为[5,4]

第二个代码将topic计数为4,将水果计数为3。它计算每个描述中单词的存在(if tropical in description)。一旦找到它,无论该描述中有多少个,它都算作一个。 因此,结果将是[4,3]

所以,我觉得这个问题是错误的。如果问题与两个单词的出现次数有关,则在此示例中[5,4]应该是正确的(在您的情况下为[3703,9259])。如果问题询问每个单词出现多少个描述,那么您正在使用if word in description来计数描述。因此,再检查一次该问题。

答案 2 :(得分:0)

count1, count2 = 0, 0

for i in description.iteritems():
    if "fruity" in i[0]:
        count1 += i[1]
    if "tropical" in i[0]:
        count2 += i[1]

descriptor_counts = pd.Series(data = {"fruity": count1, "tropical": count2},
                          index = ["tropical", "fruity"])

最近我遇到了同样的问题,这将是我不使用“lambda 表达式”的解决方案