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.
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'])
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)]
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
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.
uniqueWords = list(set(" ".join(r1).lower().split(" ")))
count = len(uniqueWords)
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.