使用Python计算列的平均单词长度

3
这是我的专栏:
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() ? - Shiva
df['ReviewText'].str.split().map(len).mean() - Ferris
2个回答

2
你的代码正在计算单词数量而不是每个单词的长度。
import numpy as np
...
df['Avg_length'] = df["Review Text"].apply(lambda x: np.mean([len(w) for w in x.split()]))

在“评论文本”列中,行的元素是表示整个句子/评论的字符串。因此,当应用匿名 lambda 函数时,lambda 函数的 x 输入是整个句子。

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

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

该函数接受一个单词列表并迭代它,因此变量w被设置为一个接一个的单词。对于每个单词w,评估其字符数即len(w)。列表推导返回每个单词即每个单词的字符数列表。因此,列表推导的结果只是一个数字列表。
np.mean()用一个数字替换了这个数字列表,该数字是它们的平均值。这个数字是lambda函数的最终输出,并被放入正在构建的新列中。所有行都会重复执行这个过程。

谢谢,它完美地运行。你介意解释一下吗? - Yilmaz
好的,我会编辑答案并添加更多解释。 - Matt Miguel

1

请尝试以下内容:

假设平均长度 = 单词数 / 句子数

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未定义”。 - Yilmaz
现在试试,我不小心在结尾之前放了一个闭括号。 - Vedant Vasishtha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接