2017-05-26 5 views
0

Ich möchte etwas Hilfe bitten, weil ich einen TypeError in einem Python-Programm nicht verstehen kann. Dieses Stück Code:Verwechslung mit Serie, Liste und einzigartigen Elementen

users2 = np.random.choice(users,5000).tolist() 
print len(users2) 
print users2[0:20] 

for user in users2: 
    tags.append(user_counters["tags"].loc[user]) 

print type(tags) 
print set(tags) 

Die Art der Tags ist die Liste. Aber wenn ich gesetzt gelten() -Methode, die einzigartigen Elemente von „Tags“ -Liste zu übernehmen, wird die folgende Fehlermeldung angezeigt:

TypeError: 'Series' objects are mutable, thus they cannot be hashed 

Ok, ich verstehe, was es bedeutet, aber ich kann nicht verstehen, was Sache ist Art " Serie".

Auf der anderen Seite, wenn die Verwendung:

print tags.unique() 

ein anderer Fehler sein Aussehen macht:

AttributeError: 'list' object has no attribute 'unique' 

Hinweis: users_counters ist Art von Datenrahmen und Benutzer Art von Liste mit seinen Elementen von users_counters.

Warum geschieht Typeerror Fehler seit Tag Liste ist und set() für Listen ist?

Danke in adnvance

Antwort

2

Ihre tags eine Liste von pandas.Series Objekten. Wenn Sie Ihre Liste von loc -basierte Auswahl aus dem Datenrahmen bauen:

for user in users2: 
    tags.append(user_counters["tags"].loc[user]) 

Sie erhalten eine Series bekommen. Dann versuchst du, aus einer Liste von Serien ein Set zu machen, aber das kannst du nicht, weil Serien nicht hashbar sind.

Also warum passiert TypeError Fehler seit Tag ist Liste und set() ist für Listen?

Huh? set akzeptiert jedes iterierbare Element, und die Elemente dieses iterablen Elements werden verwendet, um das Ergebnis set zu erstellen. Ihr iterables ist ein list, und die Elemente sind pandas.Series Objekte. Das ist das Problem.

Ich vermute, dass Sie einen Datenrahmen durch eine Reihe von Strings indiziert haben Benutzer darstellen ...

>>> df = pd.DataFrame({'tag':[1,2,3, 4], 'c':[1.4,3.9, 2.8, 6.9]}, index=['ted','sara','anne', 'ted']) 
>>> df 
     c tag 
ted 1.4 1 
sara 3.9 2 
anne 2.8 3 
ted 6.9 4 
>>> 

Wenn Sie Ihre Auswahl zu tun, da Ihre Benutzer-Index hat nicht eindeutigen Datenelemente, wenn Sie Wenn Sie die folgende Auswahl treffen, erhalten Sie eine Series:

>>> df['tag'].loc['ted'] 
user 
ted 1 
ted 4 
Name: a, dtype: int64 
>>> type(df['a'].loc['ted']) 
<class 'pandas.core.series.Series'> 
Verwandte Themen