Julia Di Russo
Theo dõi
23 tháng 10 năm 2019
·
6 phút đọc
·
Chỉ dành cho thành viên
Tiết kiệm
Điều hướng địa ngục của NaN trong Python
Tóm tắt để hiểu NaN và xử lý chúng dễ dàng trong dữ liệu của bạn
import numpy as np
one = np.nan
two = np.nan
one is two
7 là import numpy as np
one = np.nan
two = np.nan
one is two
8Cho đến nay rất tốt, được nhưng…
import numpy as np
one = np.nan
two = np.nan
one is two
9 là import numpy as np
one = np.nan
two = np.nan
one is two
0Huh?
import numpy as np
one = np.nan
two = np.nan
one is two
0 là import numpy as np
one = np.nan
two = np.nan
one is two
8Giới thiệu ngắnVậy cái quái gì đang xảy ra với NaN trong Python?
NaN là viết tắt của Not A Number và là một biểu diễn dữ liệu bị thiếu phổ biế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. Nó được giới thiệu bởi Tiêu chuẩn IEEE về Dấu phẩy động nhị phân cho số học [IEEE 754] trước khi Python tồn tại và được sử dụng trong tất cả các hệ thống tuân theo tiêu chuẩn này. NaN có thể được coi như một loại virus dữ liệu lây nhiễm tất cả các hoạt động mà nó chạm vào
Không so với NaN
Không có gì và NaN nghe có vẻ giống nhau, trông giống nhau nhưng thực ra lại khá khác nhau. Không có loại nội bộ Python nào có thể được coi là tương đương với NULL. Từ khóa
import numpy as np
one = np.nan
two = np.nan
one is two
2 được sử dụng để xác định giá trị null hoặc không có giá trị nào cả. Không có gì không giống như 0, Sai hoặc một chuỗi rỗng. Nó là một kiểu dữ liệu của riêng nó [NoneType] và chỉ có thể là Không có… Không có. Mặc dù các giá trị bị thiếu là NaN trong mảng số, nhưng chúng là Không có trong mảng đối tượng. Tốt nhất là kiểm tra Không có bằng cách sử dụng import numpy as np
one = np.nan
two = np.nan
one is two
3 thay vì import numpy as np
one = np.nan
two = np.nan
one is two
4. Chúng tôi quay lại vấn đề trước với kết quả đặc biệt mà tôi tìm thấy trong các hoạt động NaN của mìnhnan KHÔNG bằng nanLúc đầu, đọc rằng
import numpy as np
one = np.nan
two = np.nan
one is two
9 là import numpy as np
one = np.nan
two = np.nan
one is two
0 có thể gây ra phản ứng bối rối và thất vọng. Nó có vẻ kỳ lạ, nghe thực sự kỳ lạ nhưng nếu bạn suy nghĩ một chút, logic sẽ bắt đầu xuất hiện và thậm chí bắt đầu có ý nghĩa.Mặc dù chúng tôi không biết mọi NaN là gì, nhưng không phải mọi NaN đều giống nhau
Hãy tưởng tượng rằng thay vì các giá trị nan, chúng ta đang xem xét một nhóm người mà chúng ta không biết. Họ là những người hoàn toàn xa lạ với chúng tôi. Những người không quen biết có thể được coi là giống nhau đối với chúng tôi, có nghĩa là chúng tôi mô tả tất cả họ là không biết. Tuy nhiên, trên thực tế không có nghĩa là người không biết này bằng người không biết khác
Để thoát khỏi phép ẩn dụ kỳ lạ này của tôi và quay trở lại Python, NaN không thể bằng chính nó vì NaN là kết quả của một thất bại, nhưng thất bại đó có thể xảy ra theo nhiều cách. Kết quả của một lỗi không thể bằng kết quả của bất kỳ lỗi nào khác và các giá trị chưa biết không thể bằng nhau
Bình đẳng vs Bản sắcBây giờ, để hiểu tại sao
import numpy as np
one = np.nan
two = np.nan
one is two
7 lại là import numpy as np
one = np.nan
two = np.nan
one is two
8, chúng ta phải xem xét sự khác biệt giữa bình đẳng và bản sắcbình đẳng
Bình đẳng đề cập đến khái niệm mà hầu hết các lập trình viên Python đều biết là “==”. Điều này được sử dụng để hỏi Python xem nội dung của biến có giống với nội dung của biến khác không
num = 1
num2 = 1num == num2
Dòng cuối cùng sẽ dẫn đến ______28. Nội dung của cả hai biến là như nhau. Như tôi đã nói trước đây, nội dung của NaN không bao giờ bằng nội dung của NaN khác
Xác thực
Danh tính là khi bạn hỏi Python xem một biến có giống với một biến khác không, nghĩa là bạn đang hỏi Python liệu hai biến có cùng một danh tính không. Python gán một id cho mỗi biến được tạo và các id được so sánh khi Python xem xét danh tính của một biến trong một thao tác. Tuy nhiên,
import numpy as np0 là một đối tượng duy nhất luôn có cùng một id, bất kể bạn gán nó cho biến nào
import pandas as pdvar = float['nan']var is np.nan #results in True
#or
np.isnan[var] #results in True
#or
pd.isna[var] #results in True
#or
pd.isnull[var]#results in True
import numpy as np
one = np.nan
two = np.nan
one is two
import numpy as np
one = np.nan
two = np.nan
one is two
0 là import numpy as np
one = np.nan
two = np.nan
one is two
8 và import numpy as np3 cũng là
import pandas as pdvar = float['nan']var is np.nan #results in True
#or
np.isnan[var] #results in True
#or
pd.isna[var] #results in True
#or
pd.isnull[var]#results in True
import numpy as np
one = np.nan
two = np.nan
one is two
8Nếu bạn kiểm tra id của
import numpy as np5 và
import pandas as pdvar = float['nan']var is np.nan #results in True
#or
np.isnan[var] #results in True
#or
pd.isna[var] #results in True
#or
pd.isnull[var]#results in True
import numpy as np6 bằng cách sử dụng
import pandas as pdvar = float['nan']var is np.nan #results in True
#or
np.isnan[var] #results in True
#or
pd.isna[var] #results in True
#or
pd.isnull[var]#results in True
import numpy as np7 và
import pandas as pdvar = float['nan']var is np.nan #results in True
#or
np.isnan[var] #results in True
#or
pd.isna[var] #results in True
#or
pd.isnull[var]#results in True
import numpy as np8 , cùng một id sẽ được hiển thị
import pandas as pdvar = float['nan']var is np.nan #results in True
#or
np.isnan[var] #results in True
#or
pd.isna[var] #results in True
#or
pd.isnull[var]#results in True
import numpy as np
one = np.nan
two = np.nan
one is two
7 là import numpy as np
one = np.nan
two = np.nan
one is two
8 vì bộ chứa danh sách trong Python kiểm tra danh tính trước khi kiểm tra đẳng thức. Tuy nhiên, nan có những “hương vị” khác nhau tùy thuộc vào cách chúng được tạo ra. import numpy as np
one = np.nan
two = np.nan
one is two
31 tạo các đối tượng khác nhau với các id khác nhau để import numpy as np
one = np.nan
two = np.nan
one is two
32 thực sự cho Sai. Chúng tôi sẽ đề cập lại những khác biệt này sauXử lý nan mà không đau đầuKhái niệm nan đầy đủ có thể khá khó nắm bắt và rất khó xử lý lúc đầu. Rất may, gấu trúc và numpy thật tuyệt vời khi xử lý các giá trị nan và mang lại một số hàm sẽ dễ dàng, chọn, thay thế hoặc xóa các giá trị nan trong các biến của bạn
Kiểm tra nếu một giá trị là nan
Như tôi đã nói, bất cứ khi nào bạn muốn biết một giá trị có phải là nan hay không, bạn không thể kiểm tra xem nó có bằng nan hay không. Tuy nhiên, có nhiều tùy chọn khác để làm như vậy và tùy chọn tôi đề xuất không phải là tùy chọn duy nhất hiện có
import numpy as np
import pandas as pdvar = float['nan']var is np.nan #results in True
#or
np.isnan[var] #results in True
#or
pd.isna[var] #results in True
#or
pd.isnull[var]#results in True
import numpy as np
one = np.nan
two = np.nan
one is two
33 & import numpy as np
one = np.nan
two = np.nan
one is two
34 cư xử giống hệt nhau. Pandas cung cấp. isnull[] vì nó là bản chuyển thể của khung dữ liệu R trong Python. Trong R, null và na là hai loại khác nhau với các hành vi khác nhauKhác với numpy và kể từ Python 3. 5, bạn cũng có thể sử dụng
import numpy as np
one = np.nan
two = np.nan
one is two
35. Lý do tại sao tôi viết cả nan và NaN trong bài viết này [ngoài lý do tôi thiếu nhất quán] là vì giá trị không phân biệt chữ hoa chữ thường. Cả import numpy as np
one = np.nan
two = np.nan
one is two
31 hoặc import numpy as np
one = np.nan
two = np.nan
one is two
37 sẽ cho cùng một kết quảimport numpy as np
one = np.nan
two = np.nan
one is two
3Một chút cảnh báo
import numpy as np
one = np.nan
two = np.nan
one is two
2Các câu lệnh đưa ra Sai vì
import numpy as np
one = np.nan
two = np.nan
one is two
38 , import numpy as np
one = np.nan
two = np.nan
one is two
39and import numpy as np
one = np.nan
two = np.nan
one is two
20 tất cả đều có id khác nhau. Họ không có cùng bản sắcĐối với khung dữ liệu
import numpy as np
one = np.nan
two = np.nan
one is two
6Thật không may, tôi không thấy tài liệu về gấu trúc cực kỳ hữu ích khi nói đến tài liệu dữ liệu bị thiếu của chúng. Tuy nhiên, tôi thực sự đánh giá cao đoạn trích này từ Sổ tay Khoa học Dữ liệu Python cung cấp một cái nhìn tổng quan tuyệt vời về cách xử lý dữ liệu bị thiếu trong Pandas
Cần chú ý điều gìLoạiLỗi. đối tượng 'float' không thể lặp lại
Mặc dù lỗi Không có Loại khá rõ ràng, nhưng các lỗi do giá trị nan gây ra có thể hơi khó hiểu. Các giá trị Nan thường có thể gây ra lỗi [cụ thể hơn là TypeErrors] sẽ liên quan đến loại 'float' của chúng. Thông báo lỗi có thể gây ngạc nhiên, đặc biệt khi bạn tin rằng dữ liệu của mình hoàn toàn không có số float. Khung dữ liệu của bạn dường như không bao gồm bất kỳ số float nào, nhưng thực tế, nó thực sự có. Nó có thể có các giá trị NaN mà bạn không biết và bạn chỉ cần loại bỏ các giá trị nan của mình để thoát khỏi lỗi này
Là một nhà khoa học dữ liệu và lập trình viên Python, tôi thích chia sẻ kinh nghiệm của mình trong lĩnh vực này và sẽ tiếp tục viết các bài báo về Python, Machine Learning hoặc bất kỳ phát hiện thú vị nào có thể giúp cuộc sống và nhiệm vụ của lập trình viên khác dễ dàng hơn. Theo dõi tôi trên Medium hoặc Twitter để nhận thông báo về bất kỳ bài viết nào trong tương lai về Python & Khoa học dữ liệu