2017-05-24 5 views
1

J'ai appelé nom pandas.core.series.Series:accéder à des objets uniques à partir d'un dictionnaire pandas.core.series.Series

print names 

0  [{'code': '8', 'name': 'John'}, {... 
1  [{'code': '1', 'name': 'Harry'},... 
2  [{'code': '5', 'name': 'Pete'... 
3  [{'code': '1', 'name': 'Harry'... 

S'il n'y a que 10 codes et 10 noms uniques qui leur appartiennent . Comment puis-je obtenir des résultats pour ces 10 noms? Ma première hypothèse serait la suivante:

names.unique() 

mais je reçois TypeError: Type unhashable: 'liste'

S'il vous plaît aider.

+0

Si mon ou une autre réponse a été utile, ne pas oublier [accepter] (http://meta.stackexchange.com/a/5235/295067) il. Merci. – jezrael

Répondre

0

Vous pouvez utiliser concat + list comprehension avec DataFrame constructeur et Series.unique:

df = pd.concat([pd.DataFrame(x) for x in names.values.tolist()]) 
un = df['name'].unique() 
print (un) 

Une autre solution avec apply + numpy.concatenate + numpy.unique:

un = np.unique(np.concatenate(names.apply(lambda x: [y['name'] for y in x]))) 
print (un) 
+0

Cela a fonctionné merci! – Leigh

0

Vous pouvez essayer ceci:

names.str.get(0).apply(pd.Series)['name'].unique() 

.str.get pour accéder au premier dictionnaire dans la liste contenue dans les noms de la série

.apply(pd.Series) pour convertir ce dictionnaire à un dataframe

Et enfin, regardez la contenu de 'name' avec unique.