Colonne de liste de chaînes de caractères en python
J'ai une pandas dataframe comme suit:
categories review_count
0 [Burgers, Fast Food, Restaurants] 137
1 [Steakhouses, Restaurants] 176
2 [Food, Coffee & Tea, American (New), Restaurants] 390
... .... ...
... .... ...
... .... ...
De cette dataFrame,je voudrais extraire uniquement les lignes où la liste dans les "catégories" de la colonne de cette ligne contient la catégorie "Restaurants". Je l'ai essayé:
df[[df.categories.isin('Restaurants'),review_count]]
,
que j'ai aussi d'autres colonnes dans le dataFrame, j'ai précisé que ces deux colonnes que je veux extraire. Mais j'obtiens l'erreur:
TypeError: unhashable type: 'list'
Je n'ai pas trop idée de ce que cette erreur signifie que je suis très nouveau pour les pandas. S'il vous plaît laissez-moi savoir comment je peux atteindre mon objectif d'extraire uniquement les lignes de la dataFrame où les "catégories" de la colonne de cette ligne a la chaîne de Restaurants "" dans le cadre de la categories_list.
Toute aide serait grandement appréciée.
Merci d'avance!
- Le "unhashable type" erreur signifie généralement que le type, la liste dans ce cas, est mutable. Mutable types ne sont pas hashable, parce qu'ils peuvent changer après qu'ils ont produit le code de hachage. Cela se produit parce que vous essayez de récupérer un élément à l'aide d'une liste comme une clé, mais depuis une clé est d'être hashable, l'échec de la récupération.
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pourriez avoir à utiliser un
lambda
fonction pour cela, puisque vous pouvez tester si une valeur dans votre colonneisin
certaines séquences, maispandas
ne semble pas fournir une fonction pour tester si la séquence dans votre colonne contient la valeur:De sortie:
Ok, donc j'ai essayé de trouver une réponse à cela pendant un certain temps maintenant, mais ils ont été jusqu'vide (sans fondamentalement à écrire un petit recursing programme pour développer la liste) et je pense que c'est parce que, à première vue, de toute façon, ce que vous essayez de faire n'est pas vraiment efficace (Jimmy C est un commentaire sur les listes mutable est sur le point ici) et n'est pas la façon dont vous le faire la plupart du temps dans les Pandas.
Une meilleure et (je pense) de façon plus rapide serait de stocker votre liste imbriquée que les valeurs de la colonne, de sorte que vous auriez:
Évidemment, cela reviendrait à écrire un programme en python pour sortir votre catégories à partir de leurs listes imbriquées et puis à l'exportation qu'à un DataFrame, mais cette fois-ci le coup (pour les données) peut être utile pour ce que vous gagnez en utilisant des pandas à analyser l'résultant dataframe.
Il y a une section d'évaluation de livre Python pour l'Analyse de Données appelée "Calcul de l'Indicateur/Variables muettes" (autour de p. 330) qui serait une bonne ressource pour ce genre d'opération.
Désolé, ce n'est pas vraiment répondre à votre question, et je ne sais pas comment c'est faisable, mais sinon, vous pouvez essayer rtrwalker de la solution, qui a l'air assez bonne, mais c'est la branche de développement, juste pour info.
Je pense que dans pandas0.12 vous pouvez faire des choses comme:
docs à les pandas.DataFrame.requête
TypeError: unhashable type: 'list'
erreur.