
Für jeden, der in einer analytischen Funktion arbeitet, ist der Vergleich zweier Datensätze eine alltägliche Tätigkeit. Sei es, um nachzuweisen, dass sich vorgenommene Änderungen nicht auf den Rest der Daten in der Datei auswirken, was üblicherweise als “Regressionstest” bezeichnet wird, oder um den Unterschied zwischen zwei Dateien/Datensätzen zu verstehen.
Wenn die Daten zu klein sind, kommt Excel zur Hilfe. Aber was ist, wenn Ihr Datensatz riesig ist? Und Sie häufig Vergleiche durchführen müssen? In diesem Fall benötigen Sie etwas Leistungsstärkeres als Excel oder Excel-Makros.
Es gibt viele Dateivergleichstools auf dem Markt, wie z.B. beyond compare.etc.
In diesem Artikel werden wir untersuchen, wie man zwei große Dateien/Datensätze effizient vergleichen und dabei aussagekräftige Zusammenfassungen mit der Python-Bibliothek “datacompy” erstellen kann
datacompy : ist ein Paket zum Vergleich von zwei DataFrames. Ursprünglich wurde es als Ersatz für PROC COMPARE von SAS für Pandas DataFrames entwickelt, mit etwas mehr Funktionalität als nur Pandas.DataFrame.equals(Pandas.DataFrame)
Schauen wir uns an, wie wir diese Bibliothek nutzen können.
Installation von datacompy
pip install datacompy
Details :
datacompy nimmt zwei Datenrahmen als Eingabe und gibt uns einen von Menschen lesbaren Bericht mit Statistiken, die uns die Ähnlichkeiten und Unähnlichkeiten zwischen den beiden Datenrahmen mitteilen.
Es versucht, zwei Datenframes entweder über eine Liste von Verknüpfungsspalten oder über Indizes zu verbinden.
Spaltenweise Vergleiche versuchen, Werte abzugleichen, auch wenn dtypes nicht übereinstimmt. Wenn Sie also zum Beispiel eine Spalte mit decimal.Decimal-Werten in einem Datenrahmen und eine gleichnamige Spalte mit float64-Datentyp in einem anderen haben, wird Ihnen mitgeteilt, dass die dtypes unterschiedlich sind, aber es wird trotzdem versucht, die Werte zu vergleichen.
Beispiel:
Angenommen, Sie haben 2 Csv-Dateien.
Laden Sie die Dateien in zwei Datenrahmen
import datacompy
compare = datacompy.Compare(
df1,
df2,
join_columns=’acct_id’, #Sie können auch eine Liste von Spalten angeben
abs_tol=0.0001,
rel_tol=0,
df1_name=’original’,
df2_name=’new’)
Generieren Sie die Ausgabe (in Form eines Berichts)
print(compare.report())
Output :
DataComPy Comparison
— — — — — — — — — —
DataFrame Summary
— — — — — — — — -
DataFrame Columns Rows
0 original 5 7
1 new 4 6
Column Summary
— — — — — — —
Number of columns in common: 4
Number of columns in original but not in new: 1
Number of columns in new but not in original: 0
Row Summary
— — — — — -
Matched on: acct_id
Any duplicates on match values: Yes
Absolute Tolerance: 0.0001
Relative Tolerance: 0
Number of rows in common: 5
Number of rows in original but not in new: 2
Number of rows in new but not in original: 1
Number of rows with some compared columns unequal: 3
Number of rows with all compared columns equal: 2
Column Comparison
— — — — — — — — -
Number of columns compared with some values unequal: 3
Number of columns compared with all values equal: 1
Total number of values which compare unequal: 5
Columns with Unequal Values or Types
— — — — — — — — — — — — — — — — — —
Column original dtype new dtype # Unequal Max Diff # Null Diff
0 dollar_amt float64 float64 1 0.05 0
2 name object object 2 0.00 0
1 qty float64 float64 2 3.00 1
Sample Rows with Unequal Values
— — — — — — — — — — — — — — — -
acct_id dollar_amt (original) dollar_amt (new)
0 1234 123.45 123.4
acct_id qty (original) qty (new)
5 1238 8.0 5.00
3 1237 NaN 345.12
acct_id name (original) name (new)
0 1234 George Maharis George Michael Bluth
3 1237 Bob Loblaw Robert Loblaw
Sample Rows Only in original (First 10 Columns)
— — — — — — — — — — — — — — — — — — — — — — — -
acct_id dollar_amt name qty date_fld
6 1239 1.05 Loose Seal Bluth 29.0 1/1/2017
4 1237 123456.00 Bob Loblaw NaN 1/1/2017
Sample Rows Only in new (First 10 Columns)
— — — — — — — — — — — — — — — — — — — — —
acct_id dollar_amt name qty
7 1240 1.05 Loose Seal Bluth 111.0
Details of output are self explanatory