【问题标题】:What's the difference between these two ways to calculate the number of occurrences of two words in a text column?这两种计算文本列中两个单词出现次数的方法有什么区别?
【发布时间】:2021-06-05 14:02:06
【问题描述】:

我是 pandas 的新手,我现在正在 Kaggle 上学习它。

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

我从 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]

更新!原来的问题是: 创建一个系列descriptor_counts,计算这两个词中的每一个在数据集的描述列中出现的次数。

【问题讨论】:

  • 我怀疑是因为第一个计算每个描述中字符串的出现次数,然后将它们相加。如果描述中存在字符串,则第二个映射为 True,然后对它们求和(布尔值转换为整数以进行加法 - 例如。True + True == 2)。
  • 不同之处在于.str.count可以处理每个条目中单词的多次出现,而.map(lambda desc: 'tropical' in desc)只计算每个条目的布尔True/False,因此多次出现只会计为1。跨度>

标签: python pandas


【解决方案1】:

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

所以:

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

但第二个是获取 包含 'tropical''fruity' 的值,所以上面是:

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

确实如此:

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

【讨论】:

    【解决方案2】:

    这是一个例子

    第一个代码将热带记为 5,果味记为 4。它计算同一描述中单词的重复次数。 因此,在本例中,结果将是 [5,4]

    第二个代码将topical 计为4,将fruity 计为3。它计算每个描述中出现的单词(if tropical in description)。一旦找到它,无论该描述中有多少个,它都算作一个。 所以,结果将是[4,3]

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

    【讨论】:

    • 感谢您提供此示例!我回去检查了这个问题,它说:'创建一个系列descriptor_counts,计算这两个单词中的每一个出现在数据集的描述列中的次数。我可能误解了这个问题。
    【解决方案3】:
    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 表达式”的解决方案

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 2013-09-08
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2015-03-27
      • 1970-01-01
      相关资源
      最近更新 更多