Cách kiểm tra xem một giá trị có phải là NaN trong python không. Có những cách tiếp cận đang sử dụng thư viện (pandas, math và numpy) và không sử dụng thư viện
NaN là viết tắt của Not A Number và là một trong những cách phổ biến để biểu thị giá trị còn thiếu trong dữ liệu. Nó là một giá trị dấu phẩy động đặc biệt và không thể chuyển đổi thành bất kỳ loại nào khác ngoài float
Giá trị NaN là một trong những vấn đề chính trong Phân tích dữ liệu. Điều rất cần thiết là phải xử lý NaN để có được kết quả mong muốn
Dễ dàng tìm và xử lý NaN trong một mảng, chuỗi hoặc khung dữ liệu. Tuy nhiên, việc xác định một giá trị NaN độc lập rất khó. Trong bài viết này, tôi giải thích năm phương pháp để xử lý NaN trong python. Ba phương thức đầu tiên liên quan đến các chức năng dựng sẵn từ các thư viện. Hai cái cuối cùng dựa vào các thuộc tính của NaN để tìm các giá trị NaN
Phương pháp 1. Sử dụng thư viện Pandas
isna() trong thư viện gấu trúc có thể được sử dụng để kiểm tra xem giá trị có phải là null/NaN không. Nó sẽ trả về True nếu giá trị là NaN/null
import pandas as pdx = float("nan")
print(f"It's pd.isna : {pd.isna(x)}")OutputIt's pd.isna : True
Phương pháp 2. Sử dụng thư viện Numpy
isnan() trong thư viện numpy có thể được sử dụng để kiểm tra xem giá trị có phải là null/NaN không. Nó tương tự như isna() trong pandas
import numpy as npx = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")OutputIt's np.isnan : True
Phương pháp 3. Sử dụng thư viện toán học
Thư viện toán học cung cấp có tích hợp sẵn các hàm toán học. Thư viện được áp dụng cho tất cả các số thực. thư viện cmath có thể được sử dụng nếu xử lý các số phức.
Thư viện toán học có sẵn hàm isnan() để kiểm tra giá trị null/NaN.
x = float("nan")
print(f"It's math.isnan : {math.isnan(x)}")OutputIt's math.isnan : True
Phương pháp 4. So sánh với chính nó
Khi tôi bắt đầu sự nghiệp làm việc với công ty CNTT lớn, tôi phải trải qua khóa đào tạo trong tháng đầu tiên. Huấn luyện viên, khi giới thiệu khái niệm về giá trị NaN, đã đề cập rằng họ giống như người ngoài hành tinh mà chúng ta không biết gì về. Những người ngoài hành tinh này liên tục thay đổi hình dạng và do đó chúng ta không thể so sánh giá trị NaN với chính nó.
Phương pháp phổ biến nhất để kiểm tra các giá trị NaN là kiểm tra xem biến có bằng chính nó không. Nếu không, thì nó phải là giá trị NaN.
return num!= numx=float("nan")
isNaN(x)OutputTrue
Phương pháp 5. kiểm tra phạm vi
Một thuộc tính khác của NaN có thể được sử dụng để kiểm tra NaN là phạm vi. Tất cả các giá trị dấu phẩy động nằm trong phạm vi từ âm vô cực đến vô cực
vô cực < số bất kỳ < vô cực
Tuy nhiên, các giá trị NaN không nằm trong phạm vi này. Do đó, NaN có thể được xác định nếu giá trị không nằm trong phạm vi từ âm vô cực đến vô cực
Điều này có thể được thực hiện như dưới đây
def isNaN(num):if float('-inf') < float(num) < float('inf'):
return False
else:
return Truex=float("nan")
isNaN(x)OutputTrue
Tôi hy vọng bạn đã tìm thấy bài viết trên hữu ích. Tôi chắc chắn sẽ có nhiều kỹ thuật khác để kiểm tra các giá trị NaN dựa trên nhiều logic khác. Vui lòng chia sẻ các phương pháp khác mà bạn đã gặp để kiểm tra các giá trị NaN/Null
hoặc tính toán một số lớn hơn 1. 796E308 (số lớn nhất mà máy tính của bạn có thể biểu thị bằng 64 bit) -- e. g
1E307 * 100 → Inf-Inf có nghĩa là vô cực âm, kết quả của việc chia một số âm cho 0 (hoặc một số nhỏ hơn -1. 796E308) -- e. g
-1/0 → -InfNAN có nghĩa là "Không phải là số". Nó là kết quả của một phép tính không phải là một con số cũng như vô hạn được xác định rõ ràng -- e. g
0/0 → NANSqrt(-1) → NAN(Nếu bạn bật Số phức, Sqrt(-1) trả về số ảo hợp lệ, 1j. )
Null có nghĩa là không có giá trị như vậy. Ví dụ: Subscript trả về import numpy as np
x = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")OutputIt's np.isnan : True0 nếu giá trị lập chỉ mục không khớp với giá trị của Chỉ mục
x = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")OutputIt's np.isnan : True1import numpy as np
x = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")OutputIt's np.isnan : True2import numpy as np
x = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")OutputIt's np.isnan : True31E307 * 100 → Inf0
Bạn cũng có thể chỉ định một kết quả mặc định khác cho giá trị chỉ mục không khớp với chỉ mục
1E307 * 100 → Inf1
Tìm hiểu thêm về INF và NAN
Các tính toán sử dụng 1E307 * 100 → Inf2 và 1E307 * 100 → Inf3 tuân theo các khuyến nghị của ANSI (Hiệp hội các Viện Tiêu chuẩn Quốc gia), tuân theo các định luật toán học càng nhiều càng tốt
_______54____55____56____57Các biểu thức lấy 1E307 * 100 → Inf3 làm toán hạng hoặc tham số cho kết quả là 1E307 * 100 → Inf3 trừ khi biểu thức có một giá trị logic hoặc số được xác định rõ cho bất kỳ giá trị nào của 1E307 * 100 → Inf3
-1/0 → -Inf1-1/0 → -Inf2-1/0 → -Inf3Tìm hiểu thêm về NULL
Khi import numpy as np
x = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")OutputIt's np.isnan : True0 xuất hiện trong các phép toán vô hướng, nó thường tạo ra một cảnh báo và đánh giá thành import numpy as np
x = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")OutputIt's np.isnan : True0, chẳng hạn
Sum, Min, Max, ArgMax, JoinText, Npv và các hàm giảm mảng khác bỏ qua -1/0 → -Inf9
0/0 → NAN00/0 → NAN10/0 → NAN20/0 → NAN3Đồ thị cũng bỏ qua (không hiển thị) bất kỳ điểm nào có giá trị là import numpy as np
x = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")OutputIt's np.isnan : True0
Một số hàm giảm mảng, đáng chú ý là Sum, Min và Max cũng chấp nhận một tham số tùy chọn «IgnoreNaN» để bỏ qua các giá trị 0/0 → NAN5 (nếu không sẽ lan truyền, i. e. trả lại 0/0 → NAN5)