2016-06-13 11 views
8

Ich habe meine Frage aktualisiert, um ein klareres Beispiel zu geben.Pandas drop_duplicates - TypeError: Typ Objekt Argument nach * muss eine Sequenz sein, nicht Karte

Ist es möglich, die Methode drop_duplicates in Pandas zu verwenden, um doppelte Zeilen basierend auf einer Spalten-ID zu entfernen, in der die Werte eine Liste enthalten. Berücksichtigen Sie die Spalte "drei", die aus zwei Elementen in einer Liste besteht. Gibt es eine Möglichkeit, die doppelten Zeilen zu löschen, anstatt es iterativ zu tun (was meine aktuelle Problemumgehung ist).

Ich habe mein Problem umrissen durch das folgende Beispiel bereitgestellt:

import pandas as pd 

data = [ 
{'one': 50, 'two': '5:00', 'three': 'february'}, 
{'one': 25, 'two': '6:00', 'three': ['february', 'january']}, 
{'one': 25, 'two': '6:00', 'three': ['february', 'january']}, 
{'one': 25, 'two': '6:00', 'three': ['february', 'january']}, 
{'one': 90, 'two': '9:00', 'three': 'january'} 
] 

df = pd.DataFrame(data) 

print(df) 

    one    three two 
0 50    february 5:00 
1 25 [february, january] 6:00 
2 25 [february, january] 6:00 
3 25 [february, january] 6:00 
4 90    january 9:00 

df.drop_duplicates(['three']) 

Ergebnisse in dem folgenden Fehler:

TypeError: type object argument after * must be a sequence, not map 
+1

Sie 'df_two = df_one.drop_duplicates ('ID')' oder 'speziell df_two = df_one.drop_duplicates (Teilmenge = [ 'ID'])' – EdChum

+0

Angst, dass das Problem nicht gelöst hat. immer noch den gleichen Fehler sehen – user3939059

+0

also 'df_two = df_one.drop_duplicates()' Arbeit? – EdChum

Antwort

15

Ich denke, es ist, weil die Liste Typ nicht hashable ist und das ist vermasselt die duplizierte Logik. Als Abhilfe können Sie auf Tupel werfen könnte etwa so:

df['four'] = df['three'].apply(lambda x : tuple(x) if type(x) is list else x) 
df.drop_duplicates('four') 

    one    three two     four 
0 50    february 5:00    february 
1 25 [february, january] 6:00 (february, january) 
4 90    january 9:00    january 
Verwandte Themen