web-dev-qa-db-fra.com

Compter des mots distincts à partir d'un cadre de données de pandas

J'ai un cadre de données Pandas, dans lequel une colonne contient du texte. J'aimerais obtenir une liste de mots uniques apparaissant sur toute la colonne (l'espace étant la seule division).

import pandas as pd

r1=['My nickname is ft.jgt','Someone is going to my place']

df=pd.DataFrame(r1,columns=['text'])

Le résultat devrait ressembler à ceci:

['my','nickname','is','ft.jgt','someone','going','to','place']

Cela ne ferait pas de mal de compter aussi, mais ce n'est pas obligatoire.

24
ADJ

Utilisez une set pour créer la séquence d'éléments uniques.

Faites un peu de ménage sur df pour obtenir les chaînes en minuscules et les séparer:

df['text'].str.lower().str.split()
Out[43]: 
0             [my, nickname, is, ft.jgt]
1    [someone, is, going, to, my, place]

Chaque liste de cette colonne peut être passée à la fonction set.update pour obtenir des valeurs uniques. Utilisez apply pour le faire:

results = set()
df['text'].str.lower().str.split().apply(results.update)
print results

set(['someone', 'ft.jgt', 'my', 'is', 'to', 'going', 'place', 'nickname'])
41
Boud

Utilisez collections.Counter:

>>> from collections import Counter
>>> r1=['My nickname is ft.jgt','Someone is going to my place']
>>> Counter(" ".join(r1).split(" ")).items()
[('Someone', 1), ('ft.jgt', 1), ('My', 1), ('is', 2), ('to', 1), ('going', 1), ('place', 1), ('my', 1), ('nickname', 1)]
22
Ofir Israel

Si vous voulez le faire à partir de la construction DataFrame:

import pandas as pd

r1=['My nickname is ft.jgt','Someone is going to my place']

df=pd.DataFrame(r1,columns=['text'])

df.text.apply(lambda x: pd.value_counts(x.split(" "))).sum(axis = 0)

My          1
Someone     1
ft.jgt      1
going       1
is          2
my          1
nickname    1
place       1
to          1
dtype: float64

Si vous voulez une tokenization plus flexible, utilisez nltk et sa tokenize

17
cwharland

S'appuyant sur la réponse de @Ofir Israel, spécifique aux pandas:

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

Vous donnera ce que vous voulez, cela convertit les valeurs de la série de colonnes de texte en une liste, scinde les espaces et compte les occurrences.

6
EdChum
uniqueWords = list(set(" ".join(r1).lower().split(" ")))
count = len(uniqueWords)
1
Brionius

Selon la documentation v0.14.0 (version stable au moment de l'écriture), ces statistiques seraient renvoyées (dans un autre cadre de données) par DataFrame.describe() .

Notez que le nombre de valeurs uniques est not renvoyé pour les colonnes avec les types de données numeric, mais doit être renvoyé pour les colonnes string, telles que celle en question.

0
Ben Mosher