Sélectionnez les lignes contenant certaines valeurs de pandas dataframe
J'ai une pandas dataframe dont les entrées sont toutes les chaînes:
A B C
1 apple banana pear
2 pear pear apple
3 banana pear pear
4 apple apple pear
etc. Je veux sélectionner toutes les lignes qui contiennent une chaîne de caractère, disons, "banane". Je ne sais pas quelle colonne il apparaîtra à chaque fois. Bien sûr, je peux écrire une boucle for et itérer sur toutes les lignes. Mais est-il plus facile ou plus rapide façon de le faire?
- Vous pouvez aussi simplement faire
df[df.values == 'banana']
Vous devez vous connecter pour publier un commentaire.
Avec NumPy, il pourrait être vectorisé pour rechercher autant de chaînes que vous voulez, comme le
Exemple d'exécution -
Pour la seule recherche de la valeur
ou
Pour plusieurs termes de recherche:
ou
De Divakar: les lignes avec les deux sont retournés.
Vous pouvez créer un booléen masque à partir de la comparaison de l'ensemble de df à l'encontre de votre chaîne et de l'appel
dropna
passage de paramhow='all'
à déplacer lignes où votre chaîne n'apparaît pas dans tous les cols:Pour tester plusieurs valeurs, vous pouvez utiliser plusieurs masques:
Vous pouvez utiliser
index.intersection
à l'index de la commune des valeurs de l'indice:df[df == 'banana', 'apple'].dropna(how='all')
?isin
de la fonction de travail. Documentation : pandas.pydata.org/pandas-docs/stable/generated/...isin
parce que vous obtiendrez de multiples positifs si par exemple vous avez 2 pommes, mais pas de bananesfunc
comme divikar de la réponse ou de l'habillage de ma réponse dans un funcdf[df.values == 'banana']
pourrait être une meilleure solution. C'est environ 5 X plus vite. Mais, peut-être que je manque quelque chose?