2015-10-20 2 views
3

Я пытаюсь подсчитать отдельные слова в столбце моего фрейма данных. Похоже на это. На самом деле тексты - это твиты.Подсчитать отдельные слова в кадре данных Pandas

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

Мой ДФ называется результат, и это мой код:

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 текста является объектом, который, насколько я понимаю правильно для юникода текстовых данных.

+0

Очевидно, что в вашем DataFrame есть значения float, что вы хотите с ними делать? Вы тоже хотите их посчитать? –

+0

Поскольку эти тексты должны быть все твиты, я тоже хочу их пересчитать. Если этот столбец также содержит значения float, значит ли это, что я собирал твиты, которые являются просто цифрами? (заставляет меня любопытно, какие из них плавают) – Lam

+0

да это возможно. –

ответ

6

Проблема возникает из-за того, что некоторые из значений в вашей серии (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' 
+0

Спасибо, это похоже на работу. Теперь выход находится в dict, было бы логично перенести его обратно в кадр данных pandas или как-то просто продолжать работать в df? – Lam

+0

зависит от того, какую работу вы намерены делать. но я предполагаю, что dataframe будет быстрее, если вы намереваетесь провести какой-то анализ. –

+0

Общий ответ на общий вопрос: D Когда у меня возникает конкретный вопрос, я задам новый вопрос. Спасибо за помощь! – Lam

2

В конце концов я пошел на следующий код:

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

Проблема была решена, однако Anand Kumar S.

Смежные вопросы