Pandas: impossible de filtre basé sur la chaîne de l'égalité
À l'aide de pandas 0.16.2 sur python 2.7, OSX.
J'ai lu de données-image à partir d'un fichier csv comme ceci:
import pandas as pd
data = pd.read_csv("my_csv_file.csv",sep='\t', skiprows=(0), header=(0))
La sortie de data.dtypes
est:
name object
weight float64
ethnicity object
dtype: object
Je m'attendais à des types de chaînes pour le nom et l'origine ethnique. Mais j'ai trouvé les raisons ici sur DONC sur pourquoi ils sont "objet" dans de nouveaux pandas versions.
Maintenant, je veux sélectionner des lignes en fonction de l'origine ethnique, par exemple:
data[data['ethnicity']=='Asian']
Out[3]:
Empty DataFrame
Columns: [name, weight, ethnicity]
Index: []
Je obtenir le même résultat avec data[data.ethnicity=='Asian']
ou data[data['ethnicity']=="Asian"]
.
Mais quand j'ai essayer le suivant:
data[data['ethnicity'].str.contains('Asian')].head(3)
- Je obtenir les résultats que je veux.
Cependant, je ne veux pas utiliser "contient"- je voudrais vérifier directement de l'égalité.
Veuillez noter que data[data['ethnicity'].str=='Asian']
génère une erreur.
Je fais quelque chose de mal? Comment faire cela correctement?
Est-ce que votre chaîne de données contient des attaque et de fuite des caractères blancs?
Post
data.loc[data['ethnicity'].str.contains('Asian'), 'ethnicity'].head(3).tolist()
. Il vous aidera à voir si il y a des espaces dans vos cordes.les deux réponses ci-dessous étaient corrects et ils ont résolu mon problème. S'avère, c'est parce que des espaces. Il a été difficile de choisir entre deux réponses correctes. J'ai fini par le marquage de réponse plus détaillée. J'espère que c'est ok. C'était juste comme un tirage au sort.
OriginalL'auteur vpk | 2015-07-08
Vous devez vous connecter pour publier un commentaire.
Il y a probablement des espaces dans vos cordes, par exemple,
rendements
À la bande de la tête ou en queue d'espaces hors les chaînes de caractères, vous pouvez utiliser
après quoi,
rendements
OriginalL'auteur unutbu
Vous pouvez essayer ceci:
OriginalL'auteur Daniel Martin