计算Pandas数据框中的单个单词

时间:2015-10-20 16:16:57

标签: python pandas ipython

我正在尝试计算数据框列中的单个单词。看起来像这样。实际上,文本是推文。

text
this is some text that I want to count
That's all I wan't
It is unicode text

所以我从其他stackoverflow问题中发现的是我可以使用以下内容:

Count most frequent 100 words from sentences in Dataframe Pandas

Count distinct words from a Pandas Data Frame

我的df被称为结果,这是我的代码:

from collections import Counter
result2 = Counter(" ".join(result['text'].values.tolist()).split(" ")).items()
result2

我收到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-6-2f018a9f912d> in <module>()
      1 from collections import Counter
----> 2 result2 = Counter(" ".join(result['text'].values.tolist()).split(" ")).items()
      3 result2
TypeError: sequence item 25831: expected str instance, float found

文本的dtype是object,根据我的理解,对于unicode文本数据是正确的。

2 个答案:

答案 0 :(得分:7)

问题出现了,因为系列中的某些值(result['text'])属于float类型。如果你想在' '.join()期间考虑它们,那么你需要在将浮点数传递给str.join()之前将其转换为字符串。

您可以使用Series.astype()将所有值转换为字符串。此外,您实际上不需要使用.tolist(),您也可以简单地将该系列提供给str.join()。示例 -

result2 = Counter(" ".join(result['text'].astype(str)).split(" ")).items()

演示 -

In [60]: df = pd.DataFrame([['blah'],['asd'],[10.1]],columns=['A'])

In [61]: df
Out[61]:
      A
0  blah
1   asd
2  10.1

In [62]: ' '.join(df['A'])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-62-77e78c2ee142> in <module>()
----> 1 ' '.join(df['A'])

TypeError: sequence item 2: expected str instance, float found

In [63]: ' '.join(df['A'].astype(str))
Out[63]: 'blah asd 10.1'

答案 1 :(得分:2)

最后,我使用了以下代码:

pd.set_option('display.max_rows', 100)
words = pd.Series(' '.join(result['text'].astype(str)).lower().split(" ")).value_counts()[:100]
words

然而Anand S Kumar解决了这个问题。