2016-06-02 16 views
2

Ich benutze Pandas, Jupyter Notebooks und Python. Ich habe einen Datensatz mit 4 Spalten und 10000 Datensätzen. Derzeit, wenn ich den folgenden Code verwende, um Duplikate aufzunehmen, nimmt der Code irgendwie fehlerhafte Datensätze auf. Zu Ihrer Information: der Datentyp der Spalten sind wie folgt:Pandas Dataframe doppelte Datensätze Aufnahme falsche Datensätze

Initial_Date = int64 
Final_Date = int64 
Origin = object 
sub_location = object 

Mein aktueller Code ist:

dup = df.duplicated(['Initial_Date','Final_Date','Origin','sub_location'], keep='last') 

Hier ist ein Beispiel des Datensatzes ist, die mit dem obigen Code aufgenommen wird:

00121980,00121980,Australia,Brighton:Queensland 
00121980,00121980,Australia,Brisbane:Queensland 
17021987,17021987,Bangladesh,Sylhet-Sunamganj 
17021987,17021987,Brazil,Sao Paolo suburb 

Wenn Sie sich die ersten beiden Datensätze ansehen: das Anfangs- und das Enddatum sowie Origin stimmen überein, aber das Sub_origin stimmt nicht überein, eines ist Brighton und das andere ist Brisbane.

Gleiches gilt für die letzten beiden Datensätze, die Daten stimmen überein, aber Origin ist nicht identisch.

Von diesem verstehe ich, dass df.duplicated keine richtigen Datensätze erfasst oder ich verwende es nicht richtig. Sind Datentypen mit df.duplicated wichtig?

Wenn ich nur df.duplicated verwende, dann hat die Boolean-Reihe, die zurückgegeben wird, keine Duplikate. Kann mir bitte jemand erklären/zeigen, wie .duplicated verwendet wird?

Bitte beachten Sie, dass dies nicht der vollständige Datensatz ist, aber das Beispiel, das ich vorgestellt habe, ist genau das Problem, das ich im realen Datensatz habe. Ich habe die Kriterien eingeschränkt und bin auf diesen Fehler gestoßen.

Danke Jungs: D

Antwort

4

achten am keep Parameter:

In [116]: s = pd.Series([1,1,1,2,3]) 

In [117]: s 
Out[117]: 
0 1 
1 1 
2 1 
3 2 
4 3 
dtype: int64 

In [118]: s.duplicated(keep='first') 
Out[118]: 
0 False 
1  True 
2  True 
3 False 
4 False 
dtype: bool 

In [119]: s.duplicated(keep='last') 
Out[119]: 
0  True 
1  True 
2 False 
3 False 
4 False 
dtype: bool 

In [120]: s.duplicated(keep=False) 
Out[120]: 
0  True 
1  True 
2  True 
3 False 
4 False 
dtype: bool 

Ich denke, man keep=False

von docs verwenden möchten:

halten: {'zuerst', 'Last', False}, Standard 'first'

zuerst: Markieren Sie die Duplikate als True, außer beim ersten Auftreten.

zuletzt: Markieren Sie die Duplikate mit Ausnahme des letzten Auftretens als True.

Falsch: Markieren Sie alle Duplikate als True.

+0

@Timetraveller Diese Antwort ist genau richtig. In Ihrem Beispiel zeigt 'dup' nicht alle Datensätze, die aufgrund des Parameters 'keep = last' dupliziert wurden. Wenn "keep = False" gesetzt wäre, würden Sie sehen, dass die letzten zwei Datensätze jeweils Duplikate anderer Datensätze waren und nicht voneinander. – piRSquared

+0

@MaxU Hallo, was passiert, wenn ich Duplikate fallen lassen will. Wenn ich keep = False wähle, werden alle Instanzen gelöscht. Im obigen Beispiel wird der Datensatz 0,1,2, der den Wert 1 enthält, gelöscht, richtig? Was passiert, wenn ich einen der drei Datensätze behalten möchte? Ändere ich den Wert entweder auf 'last' oder 'first'? – Timetraveller

+0

@MaxU Danke Kumpel. – Timetraveller

Verwandte Themen