我有一个包含列“消息”的数据框。我想要一个新列“word_count”,它将计算消息中的所有单词。例如:
message: "Hello my name Hello"
word_count = {'Hello':2, 'my':1, 'name':1}
我的实际数据框是希伯来语,如Unicode。
我之前用字符串做过这个,但现在我遇到了unicode字符串的问题。我知道我不能使用split()
方法,所以我正在寻找另一种方法来通过空格分割unicode字符串,并计算每个单词。
我的整个数据框已经单独编码了。这就是我的尝试:
def word_count(text):
word_count = {}
for word in text.encode('utf-8'):
if word not in word_count:
word_count[word] = 1
else:
word_count[word] += 1
return word_count
..
history['word_count'] = history['clear_message'].apply(word_count)
我尝试了更多功能,但所有功能都返回了计数:
{u'': 1, u'\u05d0\u05e0\u05d0': 1, u'\u05e9\u05de\u05e2': 1}
会喜欢一些指导。
例如,输入:
שמע אתה אחד הלא מובנים
字数统计输出:
{' ': 4, '\xa2': 1, '\xd7': 18, '\xa0': 1, '\xa9': 1, '\x9d': 1, '\xaa': 1, '\x91': 1, '\x90': 3, '\x93': 1, '\x95': 1, '\x94': 2, '\x97': 1, '\x99': 1, '\n': 1, '\x9c': 1, '\x9e': 2}
预期的输出就像我在顶部写的那样(但是用希伯来文写的)。 我的python版本目前是2.7.13,可能应该更新。
答案 0 :(得分:1)
您应该可以使用str.split
和apply
与Counter
对象轻松完成此操作。
from collections import Counter
df
clear_message
0 שמע אתה אחד הלא מובנים
df.clear_message.str.split().apply(Counter)
0 {'אחד': 1, 'מובנים': 1, 'שמע': 1, 'אתה': 1, 'ה...
Name: clear_message, dtype: object
答案 1 :(得分:1)
这适用于Python 2和3。
# -*- coding: utf-8 -*-
input_val = " שמע שמע אתה אחד הלא מובנים"
def word_count(text):
word_count = {}
for word in text.split():
if word not in word_count:
word_count[word] = 1
else:
word_count[word] += 1
return word_count
print(word_count(input_val))