Hướng dẫn how to compare two sets of data for differences python - làm thế nào để so sánh hai bộ dữ liệu cho sự khác biệt python

Đối với bất kỳ ai làm việc trong vai trò phân tích, so sánh hai bộ dữ liệu sẽ là hoạt động hàng ngày. Cho dù đó là để chứng minh các thay đổi được thực hiện không ảnh hưởng đến phần còn lại của dữ liệu trong tệp thường được gọi là thử nghiệm hồi quy của Hồi giáo hay để hiểu sự khác biệt giữa hai tệp /bộ dữ liệu. Comparing two data sets will be a day to day activity. Whether that is to prove changes made are not impacting the rest of the data in the file which is typically called as “Regression testing” or to understand the difference between two files /data sets.

  • Khi dữ liệu quá nhỏ Excel đến giải cứu. Nhưng điều gì sẽ xảy ra nếu bộ dữ liệu của bạn là rất lớn? Và bạn phải thực hiện so sánh thường xuyên? Trong trường hợp này, bạn yêu cầu một cái gì đó mạnh mẽ hơn chỉ là macro Excel hoặc Excel

Có rất nhiều công cụ so sánh tệp có sẵn trên thị trường như Beyond so sánh .ETC

Trong bài viết này, chúng tôi sẽ khám phá cách so sánh hai tệp/datasetseff đủ lớn trong khi tạo ra Summery có ý nghĩa bằng thư viện Pythoncompare two large files/datasets efficiently while creating meaningful summery using Python Library “datacompy”

DataCompy: là một gói để so sánh hai khung dữ liệu. Ban đầu được bắt đầu như một sự thay thế cho SAS SAS PROC COMPARE cho các khung dữ liệu gấu trúc với một số chức năng nhiều hơn là chỉ Pandas.DataFrame.equals(Pandas.DataFrame)is a package to compare two DataFrames. Originally started as a replacement for SAS’s PROC COMPARE for Pandas DataFrames with some more functionality than just Pandas.DataFrame.equals(Pandas.DataFrame)

Hãy để xem làm thế nào chúng ta có thể sử dụng thư viện này.

Cài đặt DataCompydatacompy

pip install datacompy

Thông tin chi tiết :

DataCompy lấy hai khung dữ liệu làm đầu vào và cung cấp cho chúng tôi một báo cáo có thể đọc được của con người có chứa số liệu thống kê cho chúng tôi biết những điểm tương đồng và khác biệt giữa hai khung dữ liệu.takes two dataframes as input and gives us a human-readable report containing statistics that lets us know the similarities and dissimilarities between the two dataframes.

Nó sẽ cố gắng tham gia hai DataFrames trong danh sách các cột tham gia hoặc trên các chỉ mục.

Các so sánh khôn ngoan về cột cố gắng khớp các giá trị ngay cả khi DTYPE không khớp. Vì vậy, nếu, ví dụ, bạn có một cột có giá trị decimal.Decimal trong một khung dữ liệu và cột có tên giống hệt với kiểu dữ liệu float64 trong một loại khác, nó sẽ cho bạn biết rằng DTYPE khác nhau nhưng vẫn sẽ cố gắng so sánh các giá trị.

Thí dụ :

Giả sử bạn có 2 tệp CSV -

Tải các tệp vào hai khung dữ liệu

df1

DataFrame1 -csv1

df2

DataFrame2 -csv2

Nhập DataCompy & So sánh hai DataFrames

Nhập dữ liệu

so sánh = datacompy.compare (df1, df2, tham gia_columns = xông acct_id
df1,
df2,
join_columns=’acct_id’, #You can also specify a list of columns
abs_tol=0.0001,
rel_tol=0,
df1_name=’original’,
df2_name=’new’)

Tạo đầu ra (dưới dạng báo cáo)

print(compare.report())

Đầu ra:

So sánh dữ liệu - - - - - - - - - - -
— — — — — — — — — —

Tóm tắt DataFrame - - - - - - - - -
— — — — — — — — -

Các cột DataFrame ROWS0 Bản gốc 5 71 Mới 4 6
0 original 5 7
1 new 4 6

Tóm tắt cột - - - - - - -
— — — — — — —

Số lượng cột chung: 4number của các cột trong bản gốc nhưng không phải trong mới: 1 phát danh của các cột trong mới nhưng không phải trong bản gốc: 0
Number of columns in original but not in new: 1
Number of columns in new but not in original: 0

Tóm tắt hàng - - - - - -
— — — — — -

Khớp trên: acct_idany sao chép trên các giá trị phù hợp: khả năng dung sai yesabsolute: 0,0001 độ dung sai: 0number của các hàng chung: 5Number của các hàng trong bản gốc
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

Số lượng hàng với một số cột được so sánh không bằng nhau: 3number của các hàng với tất cả các cột được so sánh bằng nhau: 2
Number of rows with all compared columns equal: 2

So sánh cột - - - - - - - - -
— — — — — — — — -

Số lượng cột so với một số giá trị không bằng nhau: 3number của các cột so với tất cả các giá trị bằng nhau: 1total Số giá trị so sánh không bằng nhau: 5
Number of columns compared with all values equal: 1
Total number of values which compare unequal: 5

Các cột có các giá trị hoặc loại không đồng đều - - - - - - - - - - - - - - - - - - -
— — — — — — — — — — — — — — — — — —

Cột gốc DTYPE Mới DTYPE # Max không đồng đều khác nhau # NULL Diff0 Dollar_amt Float64 Float64 1 0.05 02 Tên đối tượng đối tượng 2 0.00 01 QTY float64 float64 2 3.00 1
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

Các hàng mẫu có giá trị không đồng đều - - - - - - - - - - - - - - - - - -
— — — — — — — — — — — — — — — -

ACCT_ID DOLLAR_AMT (Bản gốc) Dollar_amt (mới) 0 1234 123.45 123.4
0 1234 123.45 123.4

ACCT_ID QTY (Bản gốc)
5 1238 8.0 5.00
3 1237 NaN 345.12

ACCT_ID Tên (Bản gốc) Tên (Mới) 0 1234 George Maharis George Michael Bluth3 1237 Bob Loblaw Robert Loblaw
0 1234 George Maharis George Michael Bluth
3 1237 Bob Loblaw Robert Loblaw

Các hàng mẫu chỉ trong bản gốc (10 cột đầu tiên) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
— — — — — — — — — — — — — — — — — — — — — — — -

ACCT_ID Dollar_amt Tên QTY DATE_FLD6 1239 1.05 LOOR SEAL Bluth 29.0 1/1/20174 1237 123456.00 Bob Loblaw Nan 1/1/2017
6 1239 1.05 Loose Seal Bluth 29.0 1/1/2017
4 1237 123456.00 Bob Loblaw NaN 1/1/2017

Các hàng mẫu chỉ trong Mới (10 cột đầu tiên) - - - - - - - - - - - - - - - - - - - - - -
— — — — — — — — — — — — — — — — — — — — —

ACCT_ID DOLLAR_AMT Tên Qty7 1240 1.05 Loose Seal Bluth 111.0
7 1240 1.05 Loose Seal Bluth 111.0

Chi tiết đầu ra là tự giải thích

Điều gì đang xảy ra đằng sau hậu trường:

  1. Trong ví dụ trên, chúng tôi sẽ tham gia hai khung dữ liệu trên một cột phù hợp (ACCT_ID). Chúng ta cũng có thể vượt qua: on_index = True thay vì thay vì tham gia vào chỉ mục.matching column (acct_id) . We can also pass: on_index = True instead of “join_columns” to join on the index instead.
  2. Compare.matches() là một chức năng boolean. Nó trả về đúng nếu có một trận đấu, nếu không nó sẽ trả về sai.
  3. Chúng ta có thể vượt qua trong ignore_extra_columns=True để bỏ qua cột không khớp và không trả về ________ 8 (nó vẫn sẽ kiểm tra các cột chồng chéo)
  4. DataCompy theo mặc định hoàn trả chỉ đúng nếu có một trận đấu 100%. Chúng ta có thể điều chỉnh điều này bằng cách đặt các giá trị của ABS_TOL & REL_TOL thành khác khôngabs_tol & rel_tol to non-zero, which empowers us to specify an amount of deviation between numeric values that can be tolerated
  5. Chúng tôi cũng có thể tìm nạp các chi tiết giao điểm của hai bộ và các hàng không bằng nhau từ DF1 hoặc DF2 bằng cách sử dụng bên dưới -

intersect_rows, PROC COMPARE0, PROC COMPARE1

print(compare.df1_unq_rows)

Tất cả các hàng chưa từng có từ DF1

intersect_rows - so sánh tất cả các cột của các hàng phù hợp và trả về đúng nếu khớp và sai nếu chưa từng có

print(compare.intersect_rows)

df1_unq_columns () - đưa ra danh sách các cột có trong DF1 nhưng không phải trong DF2. Trong ví dụ của chúng tôi DATE_FLD không có trong DF2 do đó được trả về.

in (so sánh.df1_unq_columns ())

Điều kiện để xử lý các giá trị trùng lặp:

Sự kết hợp trùng lặp có phần ngây thơ khi chọn những hàng nào phù hợp khi có các bản sao. DataCompy sắp xếp theo các trường khác trước khi tạo ID tạm thời, sau đó khớp trực tiếp trên trường đó. Nếu có nhiều bản sao, bạn có thể cần phải tham gia nhiều cột hơn hoặc xử lý riêng chúng.

Giới hạn

  1. Các khung dữ liệu mà bạn so sánh phải phù hợp với bộ nhớ. So với SAS PROC COMPARE có thể hoạt động trên các bộ dữ liệu trên đĩa, đây có thể là một ràng buộc nếu bạn sử dụng các khung dữ liệu rất lớn. (Tôi đã thử so sánh hai bộ dữ liệu với hơn 0,15 triệu bản ghi hoạt động trơn tru)

Tóm lại :

DataCompy là thư viện khá hữu ích nếu bạn muốn nhanh chóng so sánh hai bộ dữ liệu. Nó cũng cho phép bạn phục vụ cho sự khác biệt nhỏ giữa các bộ dữ liệu và cung cấp tóm tắt chi tiết về hai khung dữ liệu.

Tôi hy vọng bạn thấy bài viết này hữu ích.