web-dev-qa-db-fra.com

Comment utiliser la fonction split sur chaque ligne d'un dataframe en Python?

Je veux compter le nombre de fois qu'un mot est répété dans la chaîne de relecture

Je suis en train de lire le fichier csv et de le stocker dans un fichier de données python à l'aide de la ligne ci-dessous

reviews = pd.read_csv("Amazon_baby.csv")

Le code dans les lignes ci-dessous fonctionne lorsque je l'applique à une seule révision. 

print reviews["review"][1]
a = reviews["review"][1].split("disappointed")
print a
b = len(a)
print b

La sortie pour les lignes ci-dessus était 

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

Lorsque j'applique la même logique à l'ensemble du cadre de données à 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'
7
goutam

Vous essayez de scinder la colonne de révision complète du bloc de données (qui correspond à la série mentionnée dans le message d'erreur). Ce que vous voulez faire est d'appliquer une fonction à chaque ligne du bloc de données, ce que vous pouvez faire en appelant apply sur le bloc de données:

f = lambda x: len(x["review"].split("disappointed")) -1
reviews["disappointed"] = reviews.apply(f, axis=1)
9
hoyland

pandas 0.20.3 a pandas.Series.str.split () qui agit sur chaque chaîne de la série et effectue la scission. Donc, vous pouvez simplement diviser et ensuite compter le nombre de scissions effectuées

len(reviews['review'].str.split('disappointed')) - 1

pandas.Series.str.split

4
Shashank Shekhar

Eh bien le problème est,

reviews["review"]

est une série. Dans votre premier extrait, vous le faites,

reviews["review"][1].split("disappointed")

Mettre un index pour la revue. Vous pouvez essayer de boucler sur toutes les lignes de la colonne et effectuer l'action souhaitée. Par exemple,

for index, row in reviews.iterrows():
    print len(row['review'].split("disappointed"))
1
Hossain Muctadir

Vous pouvez utiliser .str pour utiliser des méthodes de chaîne sur une série de chaînes:

reviews["review"].str.split("disappointed")
1
Goyo