【问题标题】:Average word length of a column using Python使用 Python 的列的平均字长
【发布时间】:2021-04-17 01:08:48
【问题描述】:

这是我的专栏:

ReviewText
Absolutely wonderful silky and..
Love this dress! it is so pretty...
I had such high hopes for...

我想创建一个名为 Avg_length 的新列,其中包含 ReviewText 列中单词的平均长度...

我编写了以下代码来在每个空格之后拆分字符串:

df['Avg_length'] = df["Review Text"].apply(lambda x: len(x.split()))

现在如何计算平均值?

提前谢谢...

【问题讨论】:

  • df["Review Text"].mean() ?
  • df['ReviewText'].str.split().map(len).mean()

标签: python pandas numpy python-requests jupyter-notebook


【解决方案1】:

您的代码计算的是字数而不是每个字的长度。

import numpy as np
...
df['Avg_length'] = df["Review Text"].apply(lambda x: np.mean([len(w) for w in x.split()]))

Review Text 列中的行元素是代表整个句子/评论的字符串。所以在应用匿名 lambda 函数时,lambda 函数的 x 输入就是整个句子。

调用 x.split() 会生成单词列表。 列表理解

[len(w) for w in x.split()]

获取该单词列表并对其进行迭代,因此变量 w 被设置为一个接一个的单词。对于每个单词 w,评估字符数,即 len(w)。列表推导返回每个单词的长度列表,即每个单词的字符数。因此,列表推导的结果只是一个数字列表。

np.mean() 将这个数字列表替换为一个数字,该数字是它们的平均值。这个数字是 lambda 函数的最终输出,并被放入为该行构造的新列中。这对所有行重复。

【讨论】:

  • 谢谢,它运行良好。你介意解释一下吗?
  • 当然,我会编辑答案以添加更多解释。
【解决方案2】:

试试这个:

假设平均长度 = 否。字数/没有。句子数

df['Avg_length'] = df["Review Text"].apply(lambda x: len(x.split())/len(x.split('.')))

或者,如果您假设平均长度 = 否。字数/没有。不包括空格的字符数:

df['Avg_length'] = df["Review Text"].apply(lambda x: len(x.split())/len(''.join(x.split())))

【讨论】:

  • 谢谢,但我得到的 x 没有在两者中定义...
  • 现在试试,我错误地在结束前放了 1 个右括号。
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多