如何在Pandas数据框单元格中计算总字数并将其添加到新列?

8

情感分析中的一个常见任务是获取 Pandas 数据帧单元格内单词的计数,并基于该计数创建新列。我该如何做到这一点?

4个回答

10
假设一个包含n个单词的句子中有n-1个空格,还有一种解决方案:
df['new_column'] = df['count_column'].str.count(' ') + 1

这种解决方案可能更快,因为它不会将每个字符串拆分成列表。

如果count_column包含空字符串,则需要调整结果(见下面的注释):

df['new_column'] = np.where(df['count_column'] == '', 0, df['new_column'])

我没有足够的声望来进行踩,但我想这样做的原因是因为1个单词和0个单词都没有空格,因此这些情况将被视为相同。我宁愿使用split()。 - goidelg
1
split(' ') shows exactly the same result: [len(c.split(' ')) for c in ['', 'car']] == [c.count(' ')+1 for c in ['', 'car']] - altabq
这就是为什么我没有那个声誉的原因 :-) - goidelg

6
假设您有一个使用的数据框df生成的,如下所示:
df = pandas.read_csv('dataset.csv')

您可以通过以下步骤添加一个新的列,该列包含单词数:

然后进行以下操作:

df['new_column'] = df.columnToCount.apply(lambda x: len(str(x).split(' ')))

记住split中的空格很重要,因为你是在新单词上分割。在执行此操作之前,您可能需要删除标点符号或数字并将其转换为小写。

df = df.apply(lambda x: x.astype(str).str.lower())
df = df.replace('\d+', '', regex = True)
df = df.replace('[^\w\s\+]', '', regex = True)

为什么不使用nltk单词分词器? - Bharath M Shetty
那是一个选项。 - muninn

2

针对数据框 df,从所选列中删除标点符号:

string_text = df['reviews'].str
df['reviews'] = string_text.translate(str.maketrans('', '', string.punctuation))

获取字数:

df['review_word_count'] = df['reviews'].apply(word_tokenize).tolist()
df['review_word_count'] = df['review_word_count'].apply(len)

使用新列写入CSV:

df.to_csv('./data/dataset.csv')

0
from collections import Counter

df['new_column'] = df['count_column'].apply(lambda x: Counter(" ".join(x).split(" ")).items())

这需要你将count_column中的每个文本单元格拆分为单词列表。(如果count_column中的每个单元格都包含一个字符串,则计算字符数。)另外,如果我漏掉了什么显而易见的东西,对不起。但是为什么要使用Counter(' '.join(x).split(' '))Counter(x)不能达到相同的结果吗?编辑:连接然后拆分的一个原因是确保您分解列表中包含多个以空格分隔的单词的任何字符串。 - Peter Leimbigler
@PeterLeimbigler 如果你按空格分割,你会如何计算字符数? - A.Kot
在字符串上运行 ' '.join(a_string_variable) 会在字符串中的每个字符之间插入一个空格。 - Peter Leimbigler

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