Loại bỏ các dòng chứa NaN từ DataFrame với pandas (Ví dụ) | Cách xóa và loại bỏ dữ liệu thiếu
Mục Lục
- 【📋】Giới thiệu
- 【📋】Import thư viện pandas và tạo DataFrame mẫu
- 【📋】Xóa các dòng chứa giá trị NaN trong toàn bộ DataFrame
- 【📋】Xóa các dòng chứa giá trị NaN trong một cột cụ thể
- 【📋】Sử dụng hàm 'notna' để loại bỏ các dòng chứa giá trị NaN trong một cột
- 【📋】Sử dụng hàm 'notnull' để loại bỏ các dòng chứa giá trị NaN trong một cột
- 【📋】Loại bỏ các dòng chỉ chứa giá trị NaN trong tất cả các cột
- 【📋】Sử dụng hàm 'notna' và 'any' để loại bỏ các dòng chỉ chứa giá trị NaN
- 【📋】Sử dụng hàm 'notnull' và 'any' để loại bỏ các dòng chỉ chứa giá trị NaN
- 【📋】Chỉ lựa chọn các dòng có số lượng giá trị NaN không vượt quá một ngưỡng thích hợp
【📋】Giới thiệu
Trong video này, chúng ta sẽ tìm hiểu cách loại bỏ các dòng chứa giá trị NaN trong DataFrame bằng ngôn ngữ lập trình Python và thư viện pandas. Chúng ta sẽ tạo ra một DataFrame mẫu, sau đó thực hiện các phương pháp khác nhau để loại bỏ các dòng chứa giá trị NaN dựa trên các tiêu chí khác nhau. Hãy cùng nhau tìm hiểu chi tiết các phương pháp này.
【📋】Import thư viện pandas và tạo DataFrame mẫu
Trước khi bắt đầu, chúng ta cần import thư viện pandas vào Python bằng lệnh import pandas as pd
. Sau đó, chúng ta sẽ sử dụng hàm DataFrame
để tạo ra một DataFrame mẫu gồm 6 dòng và 3 cột có tên X1, X2 và X3. DataFrame này sẽ chứa một số giá trị NaN.
import pandas as pd
# Tạo DataFrame mẫu
data = pd.DataFrame({'X1': [1, 2, 3, pd.NA, 5, 6],
'X2': [pd.NA, 8, 9, 10, 11, 12],
'X3': [13, 14, 15, pd.NA, pd.NA, 18]})
【📋】Xóa các dòng chứa giá trị NaN trong toàn bộ DataFrame
Nếu chúng ta muốn loại bỏ các dòng chứa ít nhất một giá trị NaN trong toàn bộ DataFrame, chúng ta có thể sử dụng hàm dropna
với đối số mặc định. Kết quả sẽ là một DataFrame mới chỉ chứa các dòng không chứa giá trị NaN.
data1 = data.dropna()
# In DataFrame mới
print(data1)
Kết quả:
|
X1 |
X2 |
X3 |
0 |
1 |
nan |
13 |
1 |
2 |
8 |
14 |
2 |
3 |
9 |
15 |
4 |
5 |
11 |
nan |
5 |
6 |
12 |
18 |
【📋】Xóa các dòng chứa giá trị NaN trong một cột cụ thể
Đôi khi, chúng ta chỉ muốn loại bỏ các dòng chứa giá trị NaN trong một cột cụ thể. Để làm điều này, chúng ta có thể truyền vào đối số subset
trong hàm dropna
để chỉ định cột mà chúng ta muốn tìm kiếm giá trị NaN. Các dòng chỉ chứa giá trị NaN trong cột được chỉ định sẽ được loại bỏ.
data2a = data.dropna(subset=['X2'])
# In DataFrame mới
print(data2a)
Kết quả:
|
X1 |
X2 |
X3 |
0 |
1 |
nan |
13 |
1 |
2 |
8 |
14 |
2 |
3 |
9 |
15 |
4 |
5 |
11 |
nan |
5 |
6 |
12 |
18 |
【📋】Sử dụng hàm 'notna' để loại bỏ các dòng chứa giá trị NaN trong một cột
Một cách khác để loại bỏ các dòng chứa giá trị NaN trong một cột là sử dụng hàm notna
. Hàm này sẽ trả về một mảng boolean cho biết giá trị tại mỗi điểm dữ liệu có là NaN hay không. Chúng ta có thể sử dụng mảng boolean này để lọc các dòng trong DataFrame ban đầu.
data2b = data[data['X2'].notna()]
# In DataFrame mới
print(data2b)
Kết quả:
|
X1 |
X2 |
X3 |
1 |
2 |
8 |
14 |
2 |
3 |
9 |
15 |
4 |
5 |
11 |
nan |
5 |
6 |
12 |
18 |
【📋】Sử dụng hàm 'notnull' để loại bỏ các dòng chứa giá trị NaN trong một cột
Chúng ta cũng có thể sử dụng hàm notnull
để loại bỏ các dòng chứa giá trị NaN trong một cột cụ thể. Cách tiếp cận này tương tự với việc sử dụng hàm notna
.
data2c = data[data['X2'].notnull()]
# In DataFrame mới
print(data2c)
Kết quả:
|
X1 |
X2 |
X3 |
1 |
2 |
8 |
14 |
2 |
3 |
9 |
15 |
4 |
5 |
11 |
nan |
5 |
6 |
12 |
18 |
【📋】Loại bỏ các dòng chỉ chứa giá trị NaN trong tất cả các cột
Đôi khi, chúng ta muốn loại bỏ các dòng chỉ chứa giá trị NaN trong tất cả các cột của DataFrame. Để làm điều này, chúng ta có thể sử dụng đối số how='all'
trong hàm dropna
.
data31 = data.dropna(how='all')
# In DataFrame mới
print(data31)
Kết quả:
|
X1 |
X2 |
X3 |
0 |
1 |
nan |
13 |
1 |
2 |
8 |
14 |
2 |
3 |
9 |
15 |
3 |
nan |
10 |
nan |
4 |
5 |
11 |
nan |
5 |
6 |
12 |
18 |
【📋】Sử dụng hàm 'notna' và 'any' để loại bỏ các dòng chỉ chứa giá trị NaN
Để loại bỏ các dòng chỉ chứa giá trị NaN trong DataFrame, chúng ta cũng có thể kết hợp sử dụng hàm notna
và any
. Hàm any
sẽ trả về một giá trị boolean cho biết xem mỗi dòng có chứa ít nhất một giá trị không phải NaN hay không. Chúng ta có thể sử dụng mảng boolean này để lọc các dòng trong DataFrame.
data4a = data[data.notna().any(axis=1)]
# In DataFrame mới
print(data4a)
Kết quả:
|
X1 |
X2 |
X3 |
0 |
1 |
nan |
13 |
1 |
2 |
8 |
14 |
2 |
3 |
9 |
15 |
4 |
5 |
11 |
nan |
5 |
6 |
12 |
18 |
【📋】Sử dụng hàm 'notnull' và 'any' để loại bỏ các dòng chỉ chứa giá trị NaN
Ta cũng có thể sử dụng hàm notnull
kết hợp với hàm any
để loại bỏ các dòng chỉ chứa giá trị NaN trong DataFrame. Cách tiếp cận này tương tự với phương pháp sử dụng hàm notna
và any
.
data4b = data[data.notnull().any(axis=1)]
# In DataFrame mới
print(data4b)
Kết quả:
|
X1 |
X2 |
X3 |
0 |
1 |
nan |
13 |
1 |
2 |
8 |
14 |
2 |
3 |
9 |
15 |
4 |
5 |
11 |
nan |
5 |
6 |
12 |
18 |
【📋】Chỉ lựa chọn các dòng có số lượng giá trị NaN không vượt quá một ngưỡng thích hợp
Cuối cùng, chúng ta cũng có thể chỉ lựa chọn các dòng có số lượng giá trị NaN không vượt quá một ngưỡng thích hợp. Để làm điều này, chúng ta cần sử dụng đối số thresh
trong hàm dropna
và chỉ định số lượng giá trị NaN tối đa mà mỗi dòng có thể chứa.
data5 = data.dropna(thresh=2)
# In DataFrame mới
print(data5)
Kết quả:
|
X1 |
X2 |
X3 |
1 |
2 |
8 |
14 |
2 |
3 |
9 |
15 |
4 |
5 |
11 |
nan |
5 |
6 |
12 |
18 |
Chúng ta đã tìm hiểu các phương pháp để loại bỏ các dòng chứa giá trị NaN trong DataFrame bằng Python và thư viện pandas. Nhớ kiểm tra trang chủ statisticsglobe.com để tìm hiểu thêm về chủ đề này.