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?

Vous n'avez probablement pas que la valeur de df qui est pourquoi il ne parvient pas, êtes-vous sûr que vous avez exactement la même chaîne?
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