Hướng dẫn why am i getting nan in python? - tại sao tôi lại nhận được nan trong python?
Nếu bạn thực hiện bất kỳ điều nào sau đây mà không cần cưỡi ngựa với môi trường dấu phẩy Show
Tài liệu tham khảo kinh điển cho các khía cạnh của số học máy là đặc điểm kỹ thuật của IEEE 754. Mục 7.1 mô tả ngoại lệ hoạt động không hợp lệ, đây là trường hợp được nâng lên khi bạn sắp nhận được NAN. "Ngoại lệ" trong IEEE 754 có nghĩa là một cái gì đó khác với bối cảnh ngôn ngữ lập trình. Rất nhiều triển khai chức năng đặc biệt ghi lại hành vi của họ tại các điểm kỳ dị của chức năng mà họ đang cố gắng thực hiện. Xem trang người đàn ông cho from math import isnan from datatest import validate, Predicate data = [5, 6, float('nan')] requirement = ~Predicate(isnan) validate(data, requirement)7 và from math import isnan from datatest import validate, Predicate data = [5, 6, float('nan')] requirement = ~Predicate(isnan) validate(data, requirement)8 chẳng hạn. Bạn đang hỏi cụ thể về Numpy và Scipy. Tôi không chắc liệu điều này có chỉ đơn giản là nói "Tôi đang hỏi về số học của máy xảy ra dưới mui xe trong Numpy" hoặc "Tôi đang hỏi về from math import isnan from datatest import validate, Predicate data = [5, 6, float('nan')] requirement = ~Predicate(isnan) validate(data, requirement)9 và các thứ." Tôi cho rằng trước đây, nhưng phần còn lại của câu trả lời này cố gắng tạo ra một kết nối mơ hồ với các chức năng cấp cao hơn trong Numpy. Quy tắc cơ bản là: Nếu việc thực hiện một hàm thực hiện một trong những tội lỗi ở trên, bạn sẽ nhận được một nan.If the implementation of a function commits one of the above sins, you get a NaN. Ví dụ, đối với from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)0, bạn có thể nhận được from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)1 nếu giá trị đầu vào của bạn khoảng from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)2 hoặc lớn hơn và mất độ chính xác im lặng nếu giá trị đầu vào của bạn khoảng from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)3 hoặc nhỏ hơn. Tuy nhiên, ngoài các đầu vào thực sự lố bịch, bạn khá an toàn với from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)0. Đối với những thứ liên quan đến toán học ma trận, Nans có thể tăng lên (thường là thông qua tuyến đường from math import isnan from datatest import validate data = [5, 6, float('nan')] def not_nan(x): """Values should not be NaN.""" return not isnan(x) validate(data, not_nan)5) nếu số của bạn là rất lớn hoặc ma trận của bạn cực kỳ không điều hòa. Một cuộc thảo luận đầy đủ về cách bạn có thể bị lừa bởi đại số tuyến tính số là quá dài để thuộc về một câu trả lời. Tôi khuyên bạn nên xem qua một cuốn sách đại số tuyến tính số (Trefethen và Bau rất phổ biến) trong suốt vài tháng thay thế.or your matrix is extremely ill-conditioned. A complete discussion of how you can get screwed by numerical linear algebra is too long to belong in an answer. I'd suggest going over a numerical linear algebra book (Trefethen and Bau is popular) over the course of a few months instead. Một điều tôi đã thấy hữu ích khi viết và gỡ lỗi mã mà "không nên" tạo ra NAN là bảo máy bẫy nếu xảy ra NAN. Trong Gnu C, tôi làm điều này: Khi kiểm tra một số loại dữ liệu nhất định, bạn có thể gặp các giá trị NAN. Làm việc với Nans có thể bực bội vì họ không phải lúc nào cũng hành động như người ta mong đợi. Về giá trị NAN: Nan là viết tắt của không phải là một số. Các giá trị NAN đại diện cho kết quả không xác định hoặc không thể hiện được từ các hoạt động toán học nhất định. Các hoạt động toán học liên quan đến NAN sẽ trả lại NAN hoặc tăng ngoại lệ. So sánh liên quan đến NAN sẽ trả về sai. Để đảm bảo các thành phần dữ liệu không chứa các giá trị NAN, bạn có thể sử dụng hàm trợ giúp:
Bạn cũng có thể làm điều này bằng cách sử dụng một trận đấu from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)6 đảo ngược:
Chấp nhận sự khác biệt của NaNNếu xác thực không thành công và trả về sự khác biệt của NAN, bạn có thể chấp nhận chúng như bất kỳ sự khác biệt nào khác:
Giống như các giá trị khác, Nans cũng có thể được chấp nhận như một phần của danh sách, bộ hoặc ánh xạ các khác biệt:
Ghi chú Giá trị from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)7 là mới trong Python 3.5. Các giá trị NAN cũng có thể được tạo trong bất kỳ phiên bản Python nào bằng cách sử dụng from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)8. Bỏ Nans trước khi xác thựcĐôi khi, nó OK OK để bỏ qua các giá trị NAN hoàn toàn. Nếu điều này là phù hợp trong hoàn cảnh của bạn, bạn chỉ cần xóa tất cả các bản ghi NAN và xác thực dữ liệu còn lại. Nếu bạn sử dụng gấu trúc, bạn có thể gọi các phương thức from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)9 và from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)0 để bỏ các bản ghi có chứa các giá trị NAN:
Yêu cầu giá trị nanNếu cần thiết, nó có thể yêu cầu Nans xuất hiện trong dữ liệu của bạn. Nhưng việc đặt các giá trị NAN trực tiếp vào một yêu cầu có thể được thực hiện với các vấn đề và thường nên tránh. Cách mạnh mẽ nhất để làm điều này là bằng cách thay thế các giá trị NAN bằng mã thông báo đặc biệt và sau đó yêu cầu mã thông báo. Dưới đây, chúng tôi xác định một đối tượng from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)1 tùy chỉnh và sử dụng nó để thay thế các giá trị NAN thực tế. Nếu bạn sử dụng gấu trúc, bạn có thể gọi các phương thức from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)2 và from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)3 để thay thế Nans bằng một giá trị khác:
Hiểu sâu hơnBình đẳng: Nan ≠ Nan¶Các giá trị NAN don lồng so sánh bằng bất cứ thứ gì, ngay cả bản thân họ: >>> x = float('nan') >>> x == x False Để kiểm tra xem một giá trị là NAN, nó có phổ biến cho các mô -đun và gói để cung cấp chức năng cho mục đích này không (ví dụ: from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)4, from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)5, from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)6, v.v.): >>> import math >>> x = float('nan') >>> math.isnan(x) True Mặc dù các giá trị NAN không thể được so sánh trực tiếp, chúng có thể được so sánh như là một phần của đối tượng khác biệt. Trên thực tế, các so sánh khác biệt coi tất cả các giá trị NAN là bằng nhau ngay cả khi loại cơ bản là khác nhau: from math import isnan from datatest import validate data = [5, 6, float('nan')] def not_nan(x): """Values should not be NaN.""" return not isnan(x) validate(data, not_nan)0 Danh tính: Nan là Nan, ngoại trừ khi nó không phải làMột số gói cung cấp một hằng số NAN có thể được tham chiếu trong mã người dùng (ví dụ: from math import nan from datatest import validate, accepted, Extra data = [5, 6, float('nan')] requirement = {5, 6} with accepted(Extra(nan)): validate(data, requirement)7 và from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)8). Mặc dù có thể hấp dẫn khi sử dụng các hằng số này để kiểm tra các giá trị NAN phù hợp, nhưng phương pháp này không đáng tin cậy trong thực tế. Để tối ưu hóa hiệu suất, Numpy và Pandas phải quản lý nghiêm ngặt các bố cục bộ nhớ của dữ liệu mà chúng chứa. Khi from math import nan from datatest import validate, accepted, Missing, Extra data = [5, 6, float('nan')] requirement = {5, 6, 7} with accepted([Missing(7), Extra(nan)]): validate(data, requirement)8 được chèn vào import pandas as pd from datatest import validate source = pd.Series([1, 1, 2, 2, float('nan')]) data = source.dropna() # Drop NaN valued elements. requirement = {1, 2} validate(data, requirement)0 hoặc import pandas as pd from datatest import validate source = pd.Series([1, 1, 2, 2, float('nan')]) data = source.dropna() # Drop NaN valued elements. requirement = {1, 2} validate(data, requirement)1, giá trị được ép vào một import pandas as pd from datatest import validate source = pd.Series([1, 1, 2, 2, float('nan')]) data = source.dropna() # Drop NaN valued elements. requirement = {1, 2} validate(data, requirement)2 tương thích khi cần thiết. Khi một loại NAN NAN bị ép buộc, một thể hiện riêng biệt được tạo và khả năng khớp bằng cách sử dụng toán tử import pandas as pd from datatest import validate source = pd.Series([1, 1, 2, 2, float('nan')]) data = source.dropna() # Drop NaN valued elements. requirement = {1, 2} validate(data, requirement)3 không còn hoạt động như bạn mong đợi: from math import isnan from datatest import validate data = [5, 6, float('nan')] def not_nan(x): """Values should not be NaN.""" return not isnan(x) validate(data, not_nan)1 Chúng tôi có thể xác minh rằng các loại bây giờ khác nhau: from math import isnan from datatest import validate data = [5, 6, float('nan')] def not_nan(x): """Values should not be NaN.""" return not isnan(x) validate(data, not_nan)2 Nói chung, không an toàn khi cho rằng Nan là Nan. Điều này có nghĩa là để xác nhận đáng tin cậy, tốt nhất là loại bỏ các bản ghi NAN hoàn toàn hoặc thay thế chúng bằng một số giá trị khác. Làm cách nào để sửa lỗi NAN trong Python?Chúng ta có thể thay thế các giá trị NAN bằng 0 để loại bỏ các giá trị NAN. Điều này được thực hiện bằng cách sử dụng hàm fillna (). Hàm này sẽ kiểm tra các giá trị NAN trong các cột DataFrame và điền vào giá trị đã cho.replace NaN values with 0 to get rid of NaN values. This is done by using fillna() function. This function will check the NaN values in the dataframe columns and fill the given value.
Tại sao tôi tiếp tục nhận được Nan?Không một số (NAN) được đưa ra khi cố gắng thực hiện các tính toán trên một phần của một mảng không được khởi tạo. Ví dụ: nếu bạn có mảng sau: nếu bạn thử và tìm giá trị trung bình của mảng này thì bạn sẽ thấy rằng kết quả sẽ là NAN. Điều này là do nó đang cố gắng tìm giá trị trung bình của không có gì.. For example, if you have the following array: If you try and find the mean of this array then you will find that the results will be NaN. This is because it is trying to find the mean value of nothing.
Làm thế nào để bạn tránh các giá trị NAN trong Python?Các bước để thay thế các giá trị NAN:.. Cho một cột bằng cách sử dụng gấu trúc: df ['cột dataFrame'] = df ['cột dataFrame']. Fillna (0). Cho một cột bằng cách sử dụng numpy: df ['cột dataFrame'] = df ['cột dataFrame']. Thay thế (np.nan, 0). Đối với toàn bộ khung dữ liệu bằng cách sử dụng gấu trúc: df.fillna (0). Đối với toàn bộ dữ liệu sử dụng numpy: df.replace (np.nan, 0). Làm thế nào để tôi thoát khỏi Nan trong gấu trúc?Bằng cách sử dụng phương thức dropna (), bạn có thể thả các hàng với NAN (không phải là số) và không có giá trị nào từ Pandas DataFrame.Lưu ý rằng theo mặc định, nó trả về bản sao của DataFrame sau khi xóa hàng.Nếu bạn muốn xóa khỏi DataFrame hiện có, bạn nên sử dụng tại chỗ = true. you can drop rows with NaN (Not a Number) and None values from pandas DataFrame. Note that by default it returns the copy of the DataFrame after removing rows. If you wanted to remove from the existing DataFrame, you should use inplace=True . |