Une tâche courante dans l'analyse des sentiments consiste à obtenir le nombre de mots dans une cellule de trame de données Pandas et à créer une nouvelle colonne basée sur ce nombre. Comment puis-je faire cela?Comment puis-je compter le nombre total de mots dans une cellule de données Pandas et les ajouter à une nouvelle colonne?
Répondre
Disons que vous avez un dataframe df que vous avez généré en utilisant
df = pandas.read_csv('dataset.csv')
Vous pouvez ensuite ajouter une nouvelle colonne avec le nombre de mots en procédant comme suit:
df['new_column'] = df.columnToCount.apply(lambda x: len(str(x).split(' ')))
Gardez à l'esprit l'espace dans la division est important puisque vous divisez sur de nouveaux mots. Vous pouvez supprimer les signes de ponctuation ou les chiffres et les réduire en minuscules avant d'effectuer cette opération.
df = df.apply(lambda x: x.astype(str).str.lower())
df = df.replace('\d+', '', regex = True)
df = df.replace('[^\w\s\+]', '', regex = True)
from collections import Counter
df['new_column'] = df['count_column'].apply(lambda x: Counter(" ".join(x).split(" ")).items())
Cela vous oblige à diviser chaque cellule de texte dans 'count_column' en une liste de mots. (Si chaque cellule de 'count_column' contient une seule chaîne, cela compte les caractères.) Aussi, désolé si quelque chose me manque, mais pourquoi' Counter ('' .join (x) .split ('')) '? Est-ce que 'Counter (x)' n'obtient pas le même résultat? ** EDIT: ** une raison de joindre et de diviser est de vous assurer que vous divisez toutes les chaînes de la liste qui contiennent plusieurs mots séparés par des espaces. –
@PeterLeimbigler Comment compterais-tu les caractères si tu divisais par un espace? –
en cours d'exécution ''' .join (a_string_variable)' sur une chaîne insère un espace entre chaque caractère de la chaîne. –
Pourquoi ne pas utiliser mot NLTK tokenizer? – Dark
C'est une option. – muninn