Hướng dẫn how do i extract duplicate rows in python? - làm cách nào để trích xuất các hàng trùng lặp trong python?

Tôi có một danh sách các mặt hàng có khả năng có một số vấn đề xuất khẩu. Tôi muốn có được một danh sách các mục trùng lặp để tôi có thể so sánh thủ công chúng. Khi tôi cố gắng sử dụng phương pháp trùng lặp gấu trúc, nó chỉ trả về bản sao đầu tiên. Có một cách nào để có được tất cả các bản sao và không chỉ là cách đầu tiên?

Một tiểu mục nhỏ của bộ dữ liệu của tôi trông như thế này:

ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE
1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12
F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12
8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-Jun-12
A036,1-Apr-12,"06CB8CF-Hanover NH","06CB8CF-Hanover NH",9-Aug-12
8944,19-Feb-12,"06D26AD-Hanover NH",,4-Feb-12
1004E,8-Jun-12,"06388B2-Lebanon NH",,24-Dec-11
11795,3-Jul-12,"0649597-White River VT","0649597-White River VT",30-Mar-12
30D7,11-Nov-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",30-Nov-11
3AE2,21-Feb-12,"06405B2-Lebanon NH",,26-Oct-12
B0FE,17-Feb-12,"06D1B9D-Hartland VT",,16-Feb-12
127A1,11-Dec-11,"064456E-Hanover NH","064456E-Hanover NH",11-Nov-12
161FF,20-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",3-Jul-12
A036,30-Nov-11,"063B208-Randolph VT","063B208-Randolph VT",
475B,25-Sep-12,"06D26AD-Hanover NH",,5-Nov-12
151A3,7-Mar-12,"06388B2-Lebanon NH",,16-Nov-12
CA62,3-Jan-12,,,
D31B,18-Dec-11,"06405B2-Lebanon NH",,9-Jan-12
20F5,8-Jul-12,"0669C50-Randolph VT",,3-Feb-12
8096,19-Dec-11,"0649597-White River VT","0649597-White River VT",9-Apr-12
14E48,1-Aug-12,"06D3206-Hanover NH",,
177F8,20-Aug-12,"063B208-Randolph VT","063B208-Randolph VT",5-May-12
553E,11-Oct-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",8-Mar-12
12D5F,18-Jul-12,"0649597-White River VT","0649597-White River VT",2-Nov-12
C6DC,13-Apr-12,"06388B2-Lebanon NH",,
11795,27-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",19-Jun-12
17B43,11-Aug-12,,,22-Oct-12
A036,11-Aug-12,"06D3206-Hanover NH",,19-Jun-12

Mã của tôi trông như thế này hiện tại:

df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]

Có một vài mục trùng lặp. Nhưng, khi tôi sử dụng mã trên, tôi chỉ nhận được mục đầu tiên. Trong tài liệu tham khảo API, tôi thấy làm thế nào tôi có thể nhận được mục cuối cùng, nhưng tôi muốn có tất cả chúng để tôi có thể kiểm tra trực quan chúng để xem lý do tại sao tôi có được sự khác biệt. Vì vậy, trong ví dụ này, tôi muốn nhận cả ba mục A036 và cả 11795 mục và bất kỳ mục nào khác, thay vì chỉ đầu tiên. Bất cứ sự giúp đỡ nào đều được đánh giá cao.

Trong bài viết này, chúng tôi sẽ thảo luận về các cách để tìm và chọn các hàng trùng lặp trong một khung dữ liệu chỉ dựa trên tất cả hoặc chỉ tên cột.

Trong thư viện Python sườn Pandas, lớp DataFrame cung cấp chức năng thành viên để tìm các hàng trùng lặp dựa trên tất cả các cột hoặc một số cột cụ thể, tức là.

DataFrame.duplicated(subset=None, keep='first')

Nó trả về một chuỗi boolean với giá trị thực cho mỗi hàng nhân đôi.True value for each duplicated row.

Arguments:

  • tập hợp con :
    • Nhãn đơn hoặc nhiều cột nên được sử dụng để kiểm tra trùng lặp. Nếu không cung cấp tất cả các cột sẽ được kiểm tra để tìm các hàng trùng lặp.
      be checked for finding duplicate rows.
  • giữ cho :
    • Biểu thị sự xuất hiện nên được đánh dấu là trùng lặp. Giá trị của nó có thể là {’đầu tiên,’ cuối cùng, sai}, giá trị mặc định là ‘đầu tiên.
      default value is ‘first’.
      • Đầu tiên: tất cả các bản sao ngoại trừ lần xuất hiện đầu tiên của họ sẽ được đánh dấu là đúng
      • Cuối cùng: Tất cả các bản sao ngoại trừ sự xuất hiện cuối cùng của họ sẽ được đánh dấu là đúng
      • Sai: tất cả các bản sao ngoại trừ sẽ được đánh dấu là đúng

Vài ví dụ :

Quảng cáo

Hãy để tạo ra một khung dữ liệu với một số hàng trùng lặp, tức là.

# List of Tuples
students = [('jack', 34, 'Sydeny'),
            ('Riti', 30, 'Delhi'),
            ('Aadi', 16, 'New York'),
            ('Riti', 30, 'Delhi'),
            ('Riti', 30, 'Delhi'),
            ('Riti', 30, 'Mumbai'),
            ('Aadi', 40, 'London'),
            ('Sachin', 30, 'Delhi')
            ]

# Create a DataFrame object
dfObj = pd.DataFrame(students, columns=['Name', 'Age', 'City'])

Nội dung của khung dữ liệu này là,

     Name  Age      City
0    jack   34    Sydeny
1    Riti   30     Delhi
2    Aadi   16  New York
3    Riti   30     Delhi
4    Riti   30     Delhi
5    Riti   30    Mumbai
6    Aadi   40    London
7  Sachin   30     Delhi

Bây giờ, hãy để tìm các hàng trùng lặp trong đó.

Tìm các hàng trùng lặp dựa trên tất cả các cột

Để tìm và chọn bản sao tất cả các hàng dựa trên tất cả các cột gọi daraframe.dupplicate () mà không có bất kỳ đối số tập hợp con nào. Đối số là 'Đầu tiên').subset argument. It will return a Boolean series with True at the place of each duplicated rows except their first occurrence (default value of keep argument is ‘first’). Then pass this Boolean Series to [] operator of Dataframe to select the rows which are duplicate i.e.

# Select duplicate rows except first occurrence based on all columns
duplicateRowsDF = dfObj[dfObj.duplicated()]

print("Duplicate Rows except first occurrence based on all columns are :")
print(duplicateRowsDF)

Đầu ra:

Duplicate Rows except first occurrence based on all columns are :
   Name  Age   City
3  Riti   30  Delhi
4  Riti   30  Delhi

Ở đây, tất cả các hàng trùng lặp ngoại trừ lần xuất hiện đầu tiên của chúng được trả về vì giá trị mặc định của đối số Keep là ‘đầu tiên.keep argument was ‘first’.

Nếu chúng ta muốn chọn tất cả các hàng trùng lặp ngoại trừ sự xuất hiện cuối cùng của chúng & nbsp; thì chúng ta cần phải vượt qua đối số giữ như ‘cuối cùng, tức là.keep argument as ‘last’ i.e.

# Select duplicate rows except last occurrence based on all columns
duplicateRowsDF = dfObj[dfObj.duplicated(keep='last')]

print("Duplicate Rows except last occurrence based on all columns are :")
print(duplicateRowsDF)

Đầu ra:

Duplicate Rows except last occurrence based on all columns are :
   Name  Age   City
1  Riti   30  Delhi
3  Riti   30  Delhi

Tìm các hàng trùng lặp dựa trên các cột đã chọn

Nếu chúng ta muốn so sánh các hàng và tìm bản sao chỉ dựa trên các cột đã chọn thì chúng ta nên truyền danh sách tên cột trong đối số tập hợp con của hàm dataFrame.duplicate (). Nó sẽ chọn và trả về các hàng trùng lặp chỉ dựa trên các cột được truyền này.

Ví dụ, hãy để Lừa tìm và chọn hàng dựa trên một cột duy nhất,

# Select all duplicate rows based on one column
duplicateRowsDF = dfObj[dfObj.duplicated(['Name'])]

print("Duplicate Rows based on a single column are:", duplicateRowsDF, sep='\n')

Đầu ra:

df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
0

Ở đây các hàng có cùng giá trị trong cột ‘Tên được đánh dấu là trùng lặp và được trả về.

Một ví dụ khác: Tìm và chọn hàng dựa trên hai tên cột,

df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
1

Đầu ra:

df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
2

Ở đây các hàng có cùng giá trị trong ‘tuổi và NBSP; & Các cột thành phố được đánh dấu là trùng lặp và trở lại.

Hoàn thành mã thực thi như sau,

df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
3

Đầu ra:

df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
4 & nbsp;
 

Làm thế nào để Python xử lý các hàng trùng lặp?

Chúng ta có thể sử dụng chức năng Pandas .Drop_Duplicates () để loại bỏ tất cả các hàng là trùng lặp của một hàng khác.use the pandas . drop_duplicates() function to remove all rows that are duplicates of another row.

Làm thế nào tôi có thể tìm thấy các hàng trùng lặp?

Tìm và loại bỏ các bản sao..
Chọn các ô bạn muốn kiểm tra các bản sao.....
Nhấp vào nhà> Định dạng có điều kiện> Đánh dấu các quy tắc ô> Các giá trị trùng lặp ..
Trong hộp bên cạnh các giá trị với, chọn định dạng bạn muốn áp dụng cho các giá trị trùng lặp, sau đó bấm OK ..