Cách bỏ qua nan trong python

Mỗi phương pháp này đều cho ra cùng một kết quả, nhưng phương pháp đầu tiên là cách gõ ngắn nhất nên thường được sử dụng nhiều nhất

Các ví dụ sau đây cho thấy cách sử dụng từng phương pháp trong thực tế

ví dụ 1. Xóa các giá trị NaN bằng cách sử dụng isnan()

Đoạn mã sau cho biết cách xóa các giá trị NaN khỏi mảng NumPy bằng cách sử dụng hàm isnan()

import numpy as np

#create array of data
data = np.array([4, np.nan, 6, np.nan, 10, 11, 14, 19, 22])

#define new array of data with nan values removed
new_data = data[~np.isnan(data)]

#view new array
print(new_data)

[ 4.  6. 10. 11. 14. 19. 22.]

Lưu ý rằng hai giá trị NaN đã được xóa thành công khỏi mảng NumPy

Phương thức này chỉ đơn giản là giữ tất cả các phần tử trong mảng không phải là (~) giá trị NaN

ví dụ 2. Xóa các giá trị NaN bằng cách sử dụng isfinite()

Đoạn mã sau cho biết cách xóa các giá trị NaN khỏi mảng NumPy bằng cách sử dụng hàm isfinite()

import numpy as np

#create array of data
data = np.array([4, np.nan, 6, np.nan, 10, 11, 14, 19, 22])

#define new array of data with nan values removed
new_data = data[np.isfinite(data)]

#view new array
print(new_data)

[ 4.  6. 10. 11. 14. 19. 22.]

Lưu ý rằng hai giá trị NaN đã được xóa thành công khỏi mảng NumPy

Phương pháp này chỉ đơn giản là giữ tất cả các phần tử trong mảng là các giá trị hữu hạn

Vì các giá trị NaN không phải là hữu hạn nên chúng bị xóa khỏi mảng

ví dụ 3. Xóa các giá trị NaN bằng cách sử dụng logic_not()

Đoạn mã sau cho biết cách xóa các giá trị NaN khỏi mảng NumPy bằng cách sử dụng hàm logic_not()

import numpy as np

#create array of data
data = np.array([4, np.nan, 6, np.nan, 10, 11, 14, 19, 22])

#define new array of data with nan values removed
new_data = data[np.logical_not(np.isnan(data))]
#view new array
print(new_data)

[ 4.  6. 10. 11. 14. 19. 22.]

Lưu ý rằng hai giá trị NaN đã được xóa thành công khỏi mảng NumPy

Mặc dù phương pháp này tương đương với hai phương pháp trước, nhưng nó yêu cầu gõ nhiều hơn nên không được sử dụng thường xuyên

Để bắt đầu, đây là cú pháp mà bạn có thể áp dụng để thả các hàng có giá trị NaN trong DataFrame của mình

df.dropna()

Trong phần tiếp theo, các bạn sẽ quan sát các bước áp dụng cú pháp trên vào thực tế

Các bước để thả hàng với giá trị NaN trong Pandas DataFrame

Bước 1. Tạo một DataFrame với các giá trị NaN

Giả sử bạn có tập dữ liệu sau

giá trị_1giá trị_2700DDDABC150500350XYZ40012005000

Sau đó, bạn có thể nắm bắt dữ liệu trên bằng Python bằng cách tạo DataFrame

import pandas as pd

df = pd.DataFrame({'values_1': ['700','ABC','500','XYZ','1200'],
                   'values_2': ['DDD','150','350','400','5000'] 
                   })

print (df)

Khi bạn chạy mã, bạn sẽ nhận được DataFrame này

  values_1   values_2
0      700        DDD
1      ABC        150
2      500        350
3      XYZ        400
4     1200       5000

Lưu ý rằng DataFrame chứa cả hai

  • dữ liệu số. 700, 500, 1200, 150, 350, 400, 5000
  • Giá trị phi số. ABC, XYZ, DDD

Sau đó, bạn có thể sử dụng to_numeric để chuyển đổi các giá trị trong tập dữ liệu sang định dạng float. Nhưng vì 3 trong số các giá trị đó không phải là số, nên bạn sẽ nhận được 'NaN' cho 3 giá trị đó

Đây là mã mà bạn có thể sử dụng để lấy các giá trị NaN

import pandas as pd

df = pd.DataFrame({'values_1': ['700','ABC','500','XYZ','1200'],
                   'values_2': ['DDD','150','350','400','5000'] 
                   })

df = df.apply (pd.to_numeric, errors='coerce')

print (df)

Như bạn có thể quan sát, các hàng đầu tiên, thứ hai và thứ tư hiện có các giá trị NaN

   values_1   values_2
0     700.0        NaN
1       NaN      150.0
2     500.0      350.0
3       NaN      400.0
4    1200.0     5000.0

Bước 2. Bỏ các hàng có giá trị NaN trong Pandas DataFrame

Để xóa tất cả các hàng có giá trị NaN, bạn có thể sử dụng df. dropna()

Đây là mã Python hoàn chỉnh để loại bỏ các hàng đó bằng các giá trị NaN

________số 8

Chạy mã và bạn sẽ chỉ thấy hai hàng không có bất kỳ giá trị NaN nào

   values_1   values_2
2     500.0      350.0
4    1200.0     5000.0

Bạn có thể nhận thấy rằng hai hàng đó không còn có chỉ mục tuần tự. Hiện tại là 2 và 4. Sau đó, bạn có thể đặt lại chỉ mục để bắt đầu từ 0