SAS2PYTHON - Dubletten löschen


Posted on 8 February 2023 at 07:00 by Stefan Weingaertner

In der Episode 44 unseres heutigen Blog-Beitrags zeigen wir, wie man in SAS/BASE und in Pandas mehrfache Werte oder auch komplette mehrfache Datensätze, sogenannte Dubletten, identifizieren und löschen kann.



Ein Pandas DataFrame ist einem SAS Data Set sehr ähnlich - es handelt sich um eine zweidimensionale tabellarische Datenstruktur mit gelabelten Spalten, die von unterschiedlichem Datentyp sein können. Wie in diesem Beitrag gezeigt wird, kann nahezu jede Operation, die mit dem SAS Data Step auf einen Datensatz angewendet werden kann, auch in Pandas ausgeführt werden.

Input: Unsere Input-Tabelle besitzt 6 Datensätze und besteht aus den Spalten "Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width" und "Class".


                                                                                        
Sepal_Length  Sepal_Width  Petal_Length  Petal_Width           Class
         5.1          3.5           1.4          0.2  Iris-virginica
         4.9          3.0           1.4          0.2  Iris-virginica
         4.9          3.0           1.4          0.2  Iris-virginica
         4.6          3.1           1.5          0.2     Iris-setosa
         5.0          3.6           1.4          0.2     Iris-setosa
         6.7          3.0           5.2          2.3     Iris-setosa
                    



Output: Wir generieren eine neue Tabelle, in der die mehrfachen Datensätze (Dubletten) gelöscht sind. Je nachdem, ob sich die Dubletten auf alle Spalten des Datensatzes oder nur auf ausgewählte Spalten beziehen, kann durch entsprechende vorangehende Sortierungen beeinflusst werden, welche Datensätze gelöscht werden sollen.

Da manche Operationen in SAS und Python unterschiedlich ausgeführt werden, generieren die beiden Programmiersprachen auch leicht unterschiedliche Ausgabe-Formate. Wir haben daher die Outputs mit dem dazugehörigen Code für SAS und Python separat aufgeführt.




SAS-Code bei Löschung von Dubletten über alle Spalten hinweg: Die Identifizierung und Löschung von Dubletten über alle Spalten hinweg würde man in SAS wie folgt implementieren (über eine entsprechende Sortierung sowie die Angabe des Parameters _all_ im BY-Statement kann entsprechend beeinflusst werden, welche Datensätze entfernt werden sollen).


                                            
proc sort data = df out = df_no_dups nodupkey;
    by _all_;
run;
                    


SAS-Output bei Löschung von Dubletten über alle Spalten hinweg: Das Ergebnis sieht in SAS wie folgt aus, es werden nur Datensätze gelöscht, wenn die betroffenen Datensätze über alle Spalten hinweg mehrfach vorkommen.


                                                                                        
Obs  Sepal_Length  Sepal_Width  Petal_Length  Petal_Width           Class
  1          5.1          3.5           1.4          0.2   Iris-virginica
  2          4.9          3.0           1.4          0.2   Iris-virginica
  3          4.6          3.1           1.5          0.2      Iris-setosa
  4          5.0          3.6           1.4          0.2      Iris-setosa
  5          6.7          3.0           5.2          2.3      Iris-setosa                 
                    

SAS-Code bei Löschung von Dubletten über ausgewählte Spalten: Die Identifizierung und Löschung von Dubletten über ausgewählte Spalten würde man in SAS wie folgt implementieren (über eine entsprechende Sortierung sowie die Angabe der betroffenen Spalten im BY-Statement kann entsprechend beeinflusst werden, welche Datensätze entfernt werden sollen).


                                            
proc sort data = df out = df_nodups nodupkey;
    by Class;
run;
                    


SAS-Output bei Löschung von Dubletten über ausgewählte Spalten: Das Ergebnis sieht in SAS wie folgt aus, es werden nur Datensätze gelöscht, wenn in der/den betroffenen Spalte(n) mehrfache Werte vorkommen.


                                                                                        
Obs  Sepal_Length  Sepal_Width  Petal_Length  Petal_Width           Class
  1          4.6          3.1           1.5          0.2      Iris-setosa
  2          5.1          3.5           1.4          0.2   Iris-virginica
                    




Python-Code bei Löschung von Dubletten über alle Spalten hinweg: Die Identifizierung und Löschung von Dubletten über alle Spalten hinweg würde man in Pandas wie folgt realisieren.


                                         
import pandas as pd

df_nodups = df.drop_duplicates(keep = False)
                    


Python-Output: Das Ergebnis sieht in Pandas wie folgt aus, es wird genau ein Datensatz entfernt.


                                                                                       
    Sepal_Length  Sepal_Width  Petal_Length  Petal_Width            Class
  0          5.1          3.5           1.4          0.2   Iris-virginica
  1          4.9          3.0           1.4          0.2   Iris-virginica
  2          4.6          3.1           1.5          0.2      Iris-setosa
  3          5.0          3.6           1.4          0.2      Iris-setosa
  4          6.7          3.0           5.2          2.3      Iris-setosa                 
                    


Python-Code bei Löschung von Dubletten über ausgewählte Spalten: Die Identifizierung und Löschung von Dubletten über ausgewählte Spalten würde man in Pandas wie folgt implementieren (über eine entsprechende Sortierung sowie die Angabe der betroffenen Spalten im subset-Statement kann entsprechend beeinflusst werden, welche Datensätze entfernt werden sollen).


                                            
import pandas as pd

df_nodups = df.drop_duplicates(subset=['Class'], keep=False)
                    


Python-Output bei Löschung von Dubletten über ausgewählte Spalten: Das Ergebnis sieht in Python wie folgt aus, es werden nur Datensätze gelöscht, wenn in der/den betroffenen Spalte(n) mehrfache Werte vorkommen.


                      
    Sepal_Length  Sepal_Width  Petal_Length  Petal_Width            Class
  0          4.6          3.1           1.5          0.2      Iris-setosa
  1          5.1          3.5           1.4          0.2   Iris-virginica
                    




Wenn Sie die nächste Episode nicht abwarten möchten, können Sie auch gerne unser umfangreiches Training Python für SAS Professionals buchen.

Informationen zu den nächsten Kursterminen und zu unserem gesamten Trainingsangebot finden Sie hier.