Các giá trị trùng lặp trong DataFrame Python

Nếu chúng tôi muốn so sánh các hàng và tìm các bản sao chỉ dựa trên các cột đã chọn thì chúng tôi nên chuyển danh sách tên cột trong đối số tập hợp con của Dataframe. chức năng trùng lặp (). 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

Sau đó, bạn có thể đếm số trùng lặp dưới mỗi cột bằng phương pháp được giới thiệu ở phần đầu của hướng dẫn này

df.pivot_table(columns=['DataFrame Column'], aggfunc='size')

Vì vậy, đây là mã Python hoàn chỉnh để lấy số lượng trùng lặp cho cột Màu

import pandas as pd

boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle']
        }

df = pd.DataFrame(boxes, columns= ['Color','Shape'])

dups_color = df.pivot_table(columns=['Color'], aggfunc='size')
print (dups_color)

Và đây là kết quả

Blue     2
Green    3
Red      3

Ngoài ra, bạn có thể lấy số lượng trùng lặp cho cột Hình dạng bằng mã này

import pandas as pd

boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle']
        }

df = pd.DataFrame(boxes, columns= ['Color','Shape'])

dups_shape = df.pivot_table(columns=['Shape'], aggfunc='size')
print (dups_shape)

Sau đó, bạn sẽ nhận được 4 bản sao cho mỗi hình dạng

Rectangle    4
Square       4

Trường hợp 2. đếm trùng lặp trên nhiều cột

Điều gì xảy ra nếu bạn muốn đếm số lần trùng lặp trên nhiều cột?

Ví dụ: nếu bạn muốn đếm các bản sao trên cả cột Màu và Hình dạng thì sao?

Nếu đúng như vậy, bạn chỉ cần thêm tất cả các cột cần thiết như thế này

columns=['Color','Shape']

Vì vậy, mã Python đầy đủ của bạn sẽ trông như sau

import pandas as pd

boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle']
        }

df = pd.DataFrame(boxes, columns= ['Color','Shape'])

dups_color_and_shape = df.pivot_table(columns=['Color','Shape'], aggfunc='size')
print (dups_color_and_shape)

Chạy mã và bạn sẽ nhận được số lượng trùng lặp trên cả hai cột Màu sắc và Hình dạng

import pandas as pd

boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle']
        }

df = pd.DataFrame(boxes, columns= ['Color','Shape'])
print (df)
0

Trường hợp 3. đếm trùng lặp khi có giá trị NaN trong DataFrame

Đối với trường hợp thứ ba, hãy sử dụng tập dữ liệu này có chứa các giá trị NaN

giá trị700NaN700NaN800700800

DataFrame với các giá trị NaN sẽ trông như thế này

import pandas as pd

boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle']
        }

df = pd.DataFrame(boxes, columns= ['Color','Shape'])
print (df)
1

Chạy mã và bây giờ bạn sẽ thấy các giá trị NaN đó

import pandas as pd

boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle']
        }

df = pd.DataFrame(boxes, columns= ['Color','Shape'])
print (df)
2

Sau đó, bạn có thể áp dụng phương pháp tương tự để đếm các bản sao

import pandas as pd

boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle']
        }

df = pd.DataFrame(boxes, columns= ['Color','Shape'])
print (df)
3

Đây là kết quả

import pandas as pd

boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle']
        }

df = pd.DataFrame(boxes, columns= ['Color','Shape'])
print (df)
4

Để có được số lượng các giá trị NaN, bạn có thể thay thế các giá trị NaN đó bằng bất kỳ giá trị nào bạn chọn và sau đó thực hiện đếm

Trong quá trình tiền xử lý và phân tích dữ liệu, bạn thường sẽ cần tìm hiểu xem liệu mình có dữ liệu trùng lặp hay không và cách xử lý chúng

Trong bài viết này, bạn sẽ tìm hiểu hai phương pháp,

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3 và
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
4, để tìm và xóa các hàng trùng lặp, cũng như cách sửa đổi hành vi của chúng cho phù hợp với nhu cầu cụ thể của bạn. Bài báo này có cấu trúc như sau

  1. Tìm hàng trùng lặp
  2. Đếm các hàng trùng lặp và không trùng lặp
  3. Trích xuất các hàng trùng lặp với
    >>> df.Cabin.duplicated()0      False
    1 False
    9 False
    10 False
    14 False
    ..
    271 False
    278 False
    286 False
    299 False
    300 False
    Name: Cabin, Length: 80, dtype: bool
    5
  4. Xác định bản sao nào cần đánh dấu bằng
    >>> df.Cabin.duplicated()0      False
    1 False
    9 False
    10 False
    14 False
    ..
    271 False
    278 False
    286 False
    299 False
    300 False
    Name: Cabin, Length: 80, dtype: bool
    6
  5. Xoá các hàng trùng lặp

Để trình diễn, chúng tôi sẽ sử dụng một tập hợp con từ bộ dữ liệu Titanic có sẵn trên Kaggle

import pandas as pddef load_data(): 
df_all = pd.read_csv('train.csv')
# Take a subset
return df_all.loc[:300, ['Survived', 'Pclass', 'Sex', 'Cabin', 'Embarked']].dropna()
df = load_data()

hình ảnh của tác giả

Vui lòng kiểm tra Notebook để biết mã nguồn

1. Tìm hàng trùng lặp

Để tìm các bản sao trên một cột cụ thể, chúng ta chỉ cần gọi phương thức

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3 trên cột

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool

Kết quả là một Sê-ri boolean có giá trị

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
8 biểu thị trùng lặp. Nói cách khác, giá trị
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
8 có nghĩa là mục này giống với mục trước đó

Để xem toàn bộ sự trùng lặp trong DataFrame, chỉ cần gọi phương thức

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3 trên DataFrame. Nó xuất ra
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
8 nếu toàn bộ hàng giống với hàng trước đó

>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool

Để xem xét các cột nhất định để xác định các bản sao, chúng ta có thể chuyển danh sách các cột cho đối số

>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
2

>>> df.duplicated(subset=['Survived', 'Pclass', 'Sex'])0      False
1 False
9 False
10 True
14 True
..
271 True
278 True
286 True
299 True
300 True
Length: 80, dtype: bool
2. Đếm số trùng lặp và không trùng lặp

Kết quả của

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3 là một Sê-ri boolean và chúng ta có thể cộng chúng lại để đếm số lượng trùng lặp. Đằng sau chủ đề,
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
8 được chuyển đổi thành
>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
5 và
>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
6 được chuyển đổi thành
>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
7, sau đó cộng chúng lại

# Count duplicate on a column
>>> df.Cabin.duplicated().sum()
11

Giống như trước đây, chúng ta có thể đếm số trùng lặp trong DataFrame và trên các cột nhất định

# Count duplicate in a DataFrame
>>> df.duplicated().sum()
3
# Count duplicate on certain columns
>>> df.duplicated(subset=['Survived', 'Pclass', 'Sex']).sum()
70

Nếu bạn muốn đếm số lượng không trùng lặp (Số lượng của

>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
6), bạn có thể đảo ngược nó bằng cách phủ định (
>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
9) rồi gọi
>>> df.duplicated(subset=['Survived', 'Pclass', 'Sex'])0      False
1 False
9 False
10 True
14 True
..
271 True
278 True
286 True
299 True
300 True
Length: 80, dtype: bool
0

# Count the number of non-duplicates
>>> (~df.duplicated()).sum()
77
3. Trích xuất các hàng trùng lặp với
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
5

Pandas

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3 trả về một Sê-ri boolean. Tuy nhiên, sẽ không thực tế khi xem danh sách
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
8 và
>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
6 khi chúng tôi cần thực hiện một số phân tích dữ liệu

Chúng tôi có thể bộ chọn dữ liệu

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
5 của Pandas để trích xuất các hàng trùng lặp đó

# Extract duplicate rows
df.loc[df.duplicated(), :]

hình ảnh của tác giả

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
5 có thể lấy Sê-ri boolean và lọc dữ liệu dựa trên
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
8 và
>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
6. Đối số đầu tiên
>>> df.duplicated(subset=['Survived', 'Pclass', 'Sex'])0      False
1 False
9 False
10 True
14 True
..
271 True
278 True
286 True
299 True
300 True
Length: 80, dtype: bool
9 sẽ tìm các hàng được xác định bởi
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3. Đối số thứ hai
# Count duplicate on a column
>>> df.Cabin.duplicated().sum()
11
1 sẽ hiển thị tất cả các cột

4. Xác định bản sao nào cần đánh dấu bằng
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
6

Có một đối số

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
6 trong Pandas
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3 để xác định những bản sao nào cần đánh dấu.
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
6 mặc định là
# Count duplicate on a column
>>> df.Cabin.duplicated().sum()
11
6, có nghĩa là lần xuất hiện đầu tiên được giữ lại và tất cả những lần xuất hiện khác được xác định là trùng lặp

Chúng tôi có thể thay đổi nó thành

# Count duplicate on a column
>>> df.Cabin.duplicated().sum()
11
7 giữ lần xuất hiện cuối cùng và đánh dấu tất cả những cái khác là trùng lặp

hình ảnh của tác giả

Có một tùy chọn thứ ba chúng ta có thể sử dụng

# Count duplicate on a column
>>> df.Cabin.duplicated().sum()
11
8. Nó đánh dấu tất cả các hàng trùng lặp là
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
8 và cho phép chúng tôi xem tất cả các hàng trùng lặp

hình ảnh của tác giả5. Xoá các hàng trùng lặp

Chúng ta có thể sử dụng phương thức tích hợp sẵn của Pandas

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
4 để loại bỏ các hàng trùng lặp

df.drop_duplicates()

hình ảnh của tác giả

Lưu ý rằng chúng tôi đã bắt đầu với 80 hàng, bây giờ là 77. Theo mặc định, phương thức này trả về một DataFrame mới với các hàng trùng lặp đã bị xóa. Chúng tôi có thể đặt đối số

# Count duplicate in a DataFrame
>>> df.duplicated().sum()
3
# Count duplicate on certain columns
>>> df.duplicated(subset=['Survived', 'Pclass', 'Sex']).sum()
70
1 để xóa các bản sao khỏi Khung dữ liệu gốc

df.drop_duplicates(inplace=True)

Xác định bản sao nào cần giữ

Đối số

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
6 cũng có thể được đặt cho
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
4 để xác định những bản sao nào cần giữ lại. Nó mặc định là
# Count duplicate on a column
>>> df.Cabin.duplicated().sum()
11
6 để giữ lần xuất hiện đầu tiên và loại bỏ tất cả các bản sao khác

Tương tự, chúng ta có thể đặt

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
6 thành
# Count duplicate on a column
>>> df.Cabin.duplicated().sum()
11
7 để giữ lần xuất hiện cuối cùng và loại bỏ các bản sao khác

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
0

Và chúng tôi có thể đặt

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
6 thành
>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
6 để loại bỏ tất cả các bản sao

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
1

Xem xét các cột nhất định để loại bỏ các bản sao

Tương tự, để xem xét các cột nhất định để loại bỏ các bản sao, chúng ta có thể chuyển danh sách các cột cho đối số

>>> df.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Length: 80, dtype: bool
2

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
2Kết luận

Pandas

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3 và
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
4 là hai phương pháp nhanh chóng và thuận tiện để tìm và loại bỏ các bản sao. Điều quan trọng là phải biết chúng vì chúng ta thường cần sử dụng chúng trong quá trình tiền xử lý và phân tích dữ liệu

Tôi hy vọng bài viết này sẽ giúp bạn tiết kiệm thời gian trong việc học Pandas. Tôi khuyên bạn nên xem tài liệu về API

>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
3 và
>>> df.Cabin.duplicated()0      False
1 False
9 False
10 False
14 False
..
271 False
278 False
286 False
299 False
300 False
Name: Cabin, Length: 80, dtype: bool
4 và để biết về những điều khác mà bạn có thể làm

Cảm ơn vì đã đọc. Vui lòng kiểm tra sổ ghi chép để biết mã nguồn và tiếp tục theo dõi nếu bạn quan tâm đến khía cạnh thực tế của máy học

Python xử lý các giá trị trùng lặp trong tập dữ liệu như thế nào?

Phương thức drop_duplicates() của Pandas giúp loại bỏ các bản sao khỏi Khung dữ liệu Pandas trong Python.

Làm cách nào để tính các giá trị trùng lặp trong Pandas?

Bạn có thể đếm các bản sao trong DataFrame của gấu trúc bằng cách sử dụng DataFrame. hàm Pivot_table() . Hàm này đếm số mục trùng lặp trong một cột, nhiều cột và đếm các mục trùng lặp khi có giá trị NaN trong DataFrame.

Làm cách nào để xóa các giá trị trùng lặp trong Pandas DataFrame?

Cú pháp hàm pandas drop_duplicates() . Nếu là 'cuối cùng', các hàng trùng lặp trừ hàng cuối cùng sẽ bị xóa. Nếu Sai, tất cả các hàng trùng lặp sẽ bị xóa. thay thế. nếu Đúng, Khung dữ liệu nguồn được thay đổi và Không được trả lại.