Comment utiliser la fonction de répartition sur chaque ligne dans un dataframe en Python?
Je veux compter le nombre de fois qu'un mot est répété dans l'examen de la chaîne de
Je suis de la lecture du fichier csv et de les stocker dans un python dataframe à l'aide de la ligne ci-dessous
reviews = pd.read_csv("amazon_baby.csv")
Le code dans l'en-dessous des lignes de travail quand je l'applique à un seul examen.
print reviews["review"][1]
a = reviews["review"][1].split("disappointed")
print a
b = len(a)
print b
La sortie pour les lignes ci-dessus ont été
it came early and was not disappointed. i love planet wise bags and now my wipe holder. it keps my osocozy wipes moist and does not leak. highly recommend it.
['it came early and was not ', '. i love planet wise bags and now my wipe holder. it keps my osocozy wipes moist and does not leak. highly recommend it.']
2
Quand j'applique la même logique à l'ensemble du dataframe à l'aide de la ligne ci-dessous. Je reçois un message d'erreur
reviews['disappointed'] = len(reviews["review"].split("disappointed"))-1
Message d'erreur:
Traceback (most recent call last):
File "C:/Users/gouta/PycharmProjects/MLCourse1/Classifier.py", line 12, in <module>
reviews['disappointed'] = len(reviews["review"].split("disappointed"))-1
File "C:\Users\gouta\Anaconda2\lib\site-packages\pandas\core\generic.py", line 2360, in __getattr__
(type(self).__name__, name))
AttributeError: 'Series' object has no attribute 'split'
OriginalL'auteur goutam | 2016-03-19
Vous devez vous connecter pour publier un commentaire.
Vous êtes en train de séparer l'ensemble de l'examen de la colonne de la trame de données (ce qui est le recueil mentionné dans le message d'erreur). Ce que vous voulez faire est d'appliquer une fonction à chaque ligne de la trame de données, vous pouvez le faire en appelant appliquer sur le bloc de données:
Je pense que cela devrait fonctionner comme l'a écrit, mais je n'ai pas le tester. Quel est le problème?
Fichier "Classifier.py", à la ligne 18, in <module> commentaires["déçu"] = examens.appliquer(f, axis=1) Fichier "pandas\core\frame.py" de ligne, 3972, s'appliquent retour auto._apply_standard(f, l'axe, de réduire les=réduire) le Fichier "pandas\core\frame.py" de ligne, 4064, dans apply_standard résultats[i] = func(v) le Fichier "Classifier.py", à la ligne 17, dans <lambda> f = lambda x: len(commentaires["examen"].split("déçu")) -1 Fichier "pandas\core\generic.py" de ligne, 2360, dans getattr (type(self).__nom_, nom)) AttributeError: (""Série" de l'objet n'a pas d'attribut 'split'", u'occurred à l'indice 0')
Oups. Il devrait être
lambda x: len(x["review"].split("disappointed")) -1
.x
est la ligne passé à la fonction pas l'ensemble de la trame de données elle-même.OriginalL'auteur hoyland
pandas 0.20.3 a pandas.De la série.str.split() qui agit sur toutes les chaînes de la série et le split. Ainsi, vous pouvez simplement split, puis de compter le nombre de divisions effectuées
les pandas.De la série.str.split
OriginalL'auteur Shashank Shekhar
Vous pouvez utiliser
.str
à l'utilisation de méthodes string sur la série de cordes:Il n'résoudre le problème de l'application de
split
à chaque ligne. Id ne permet pas de résoudre le problème du calcul de la longueur parce que je pensais que c'était assez facile. Et je sais quereviews["review"]
est une série de chaînes de caractères. Pourquoi pensez-vous que je ne le fais pas?OriginalL'auteur Goyo
Le problème est,
est une Série. Dans votre premier extrait que vous faites cela,
Mettre un indice pour la révision. Vous pouvez essayer de boucler sur toutes les lignes de la colonne et effectuer votre action désirée. Par exemple,
OriginalL'auteur Hossain Muctadir