Hướng dẫn how do i fix nan in python? - làm cách nào để sửa nan trong python?

Bởi Bernd Klein. Sửa đổi lần cuối: 24 tháng 3 năm 2022.Bernd Klein. Last modified: 24 Mar 2022.

Trên trang này

Giới thiệu

Hướng dẫn how do i fix nan in python? - làm cách nào để sửa nan trong python?

NAN đã được giới thiệu, ít nhất là chính thức, theo tiêu chuẩn của IEEE cho số học nổi (IEEE 754). Đây là một tiêu chuẩn kỹ thuật để tính toán điểm nổi được thiết lập vào năm 1985 - nhiều năm trước khi Python được phát minh, và thậm chí cả thời gian dài hơn cho Pandas được tạo ra - bởi Viện Kỹ sư Điện và Điện tử (IEEE). Nó đã được giới thiệu để giải quyết các vấn đề được tìm thấy trong nhiều triển khai điểm nổi khiến chúng khó sử dụng một cách đáng tin cậy và một cách đáng tin cậy.

Tiêu chuẩn này đã thêm NAN vào các định dạng số học: "Các định dạng số học: Các bộ dữ liệu dấu phẩy động nhị phân và thập phân, bao gồm các số hữu hạn (bao gồm các số không có chữ ký và số dưới mức), tính không đồng nhất và các giá trị 'không phải là số' (NAN) đặc biệt (NAN) "

'nan' trong Python

Python cũng biết các giá trị NAN. Chúng ta có thể tạo nó bằng "float":

n1 = float("nan")
n2 = float("Nan")
n3 = float("NaN")
n4 = float("NAN")
print(n1, n2, n3, n4)

OUTPUT:

"NAN" cũng là một phần của mô -đun toán học kể từ Python 3.5:

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))

OUTPUT:

Cảnh báo: Không thực hiện so sánh giữa các giá trị "NAN" hoặc các giá trị "NAN" và số thông thường. Một lý luận đơn giản hoặc đơn giản là thế này: hai điều "không phải là một số", vì vậy chúng có thể là bất cứ điều gì nhưng hầu hết có lẽ không giống nhau. Trên hết, không có cách nào để đặt hàng nans:

print(n1 == n2)
print(n1 == 0)
print(n1 == 100)
print(n2 < 0)

OUTPUT:

Nan trong gấu trúc

Ví dụ mà không có nans

Trước khi chúng tôi làm việc với dữ liệu NAN, chúng tôi sẽ xử lý một tệp mà không có bất kỳ giá trị NAN nào. Nhiệt độ tệp dữ liệu.CSV chứa dữ liệu nhiệt độ của sáu cảm biến được thực hiện cứ sau 15 minut trong khoảng thời gian từ 6:00 đến 19,15 giờ.

Đọc trong tệp dữ liệu có thể được thực hiện với chức năng read_csv:

import pandas as pd

df = pd.read_csv("../data1/temperatures.csv",
                 sep=";",
                 decimal=",",
                 index_col=0)
df[:5]

sensor1sensor2sensor3sensor4sensor5sensor6
thời gian
06:00:0014.3 13.7 14.2 14.3 13.5 13.6
06:15:0014.5 14.5 14.0 15.0 14.5 14.7
06:30:0014.6 15.1 14.8 15.3 14.0 14.2
06:45:0014.8 14.5 15.6 15.2 14.7 14.6
07:00:0015.0 14.9 15.7 15.6 14.0 15.3

Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:

OUTPUT:

sensor1    19.775926
sensor2    19.757407
sensor3    19.840741
sensor4    20.187037
sensor5    19.181481
sensor6    19.437037
dtype: float64

average_temp_series = df.mean(axis=1)
print(average_temp_series[:8])

OUTPUT:

time
06:00:00    13.933333
06:15:00    14.533333
06:30:00    14.666667
06:45:00    14.900000
07:00:00    15.083333
07:15:00    15.116667
07:30:00    15.283333
07:45:00    15.116667
dtype: float64

sensors = df.columns.values[0:]
# all columns will be removed:
df = df.drop(sensors, axis=1)
print(df[:5])

OUTPUT:

Empty DataFrame
Columns: []
Index: [06:00:00, 06:15:00, 06:30:00, 06:45:00, 07:00:00]

Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':

# best practice:
df = df.assign(temperature=average_temp_series)  # inplace option not available

# alternatively:
#df.loc[:,"temperature"] = average_temp_series

nhiệt độ
thời gian
06:00:0013.933333
06:15:0014.533333
06:30:0014.666667

Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:

Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':

nhiệt độ

Ví dụ với Nans

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))
0

sensor1sensor2sensor3sensor4sensor5sensor6
thời gian
06:00:0014.3 13.7 14.2 14.3 13.5 13.6
06:15:0014.5 14.5 14.0 15.0 14.5 14.7
06:30:0014.6 15.1 14.8 15.3 14.0 14.2
06:45:0014.8 14.5 15.6 15.2 14.7 14.6
07:00:0015.0 14.9 15.7 15.6 14.0 15.3
07:15:0015.2 15.2 14.6 15.3 15.5 14.9
07:30:0015.4 15.3 15.6 15.6 14.7 15.1
07:45:0015.5 14.8 15.4 15.5 14.6 14.9

Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:

Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':

nhiệt độ

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))
1

Ví dụ với NansBây giờ chúng tôi sẽ sử dụng một tệp dữ liệu tương tự như CSV nhiệt độ trước đó, nhưng lần này chúng tôi sẽ phải đối phó với dữ liệu NAN, khi các cảm biến bị trục trặc.
018 -27
114 -23
228 -21
36 -23

Chúng tôi sẽ tạo ra một khung dữ liệu nhiệt độ, trong đó một số dữ liệu không được xác định, tức là nan.

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))
2

sensor1sensor2sensor3sensor4sensor5sensor6
thời gian
06:00:00Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:
06:15:00Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':
06:30:00Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':
06:45:00Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:
07:00:00Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:

Bây giờ chúng tôi sẽ gán các giá trị nhiệt độ trung bình là một cột mới 'nhiệt độ':

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))
3

sensor1sensor2sensor3sensor4sensor5sensor6
thời gian
06:00:00Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:13.7 14.2 14.3 13.5 Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:
06:15:00Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:14.5 14.0 15.0 Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:14.7
06:30:00Chúng tôi muốn tính toán nhiệt độ avarage trên mỗi điểm đo trên tất cả các cảm biến. Chúng ta có thể sử dụng phương thức DataFrame 'trung bình'. Nếu chúng ta sử dụng 'trung bình' mà không có tham số, nó sẽ tổng hợp các cột cảm biến, đó không phải là điều chúng ta muốn, nhưng nó cũng có thể thú vị:15.1 14.8 15.3 14.0 14.2
06:45:0014.8 14.5 15.6 15.2 14.7 Nan
07:00:0015.0 Nan15.7 15.6 14.0 Nan
07:15:0015.2 15.2 14.6 15.3 15.5 14.9
07:30:00Nan15.3 15.6 Nan14.7 15.1
07:45:0015.5 14.8 15.4 15.5 14.6 14.9
08:00:0015.7 15.6 15.9 16.2 15.4 15.4
08:15:0015.9 15.8 Nan16.9 Nan16.2

Đào tạo Python sống

Hướng dẫn how do i fix nan in python? - làm cách nào để sửa nan trong python?

Các khóa học trực tuyến sắp tới

Ghi danh ở đây

Sử dụng Dropna trên DataFrame

'Dropna' là một phương thức DataFrame. Nếu chúng ta gọi phương thức này mà không có đối số, nó sẽ trả về một đối tượng trong đó mọi hàng được thực hiện, trong đó thiếu dữ liệu, tức là một số giá trị là NAN:

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))
4

sensor1sensor2sensor3sensor4sensor5sensor6
thời gian
07:15:0015.2 15.2 14.6 15.3 15.5 14.9
07:45:0015.5 14.8 15.4 15.5 14.6 14.9
08:00:0015.7 15.6 15.9 16.2 15.4 15.4
08:30:0016.1 15.7 16.1 15.9 14.9 15.2
09:15:0017.1 17.5 17.5 17.3 16.6 16.8
09:45:0018.4 19.0 19.0 19.4 18.4 18.3
10:30:0020.4 19.4 20.0 21.0 20.2 19.8
12:15:0023.8 23.7 24.8 25.1 22.2 22.4
13:30:0022.9 21.9 22.9 24.3 22.9 23.0
14:15:0022.3 22.9 21.9 22.3 22.5 21.1
16:00:0021.1 21.6 20.7 20.6 19.9 21.4
17:45:0019.9 20.4 19.4 21.1 20.0 20.5
18:30:0019.5 19.1 19.2 19.7 18.3 18.3

'Dropna' cũng có thể được sử dụng để thả tất cả các cột trong đó một số giá trị là NAN. Điều này có thể đạt được bằng cách gán 1 cho tham số trục. Giá trị mặc định là sai, như chúng ta đã thấy trong ví dụ trước của chúng ta. Vì mọi cột từ các cảm biến của chúng tôi chứa các giá trị NAN, tất cả chúng sẽ biến mất:

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))
5

thời gian
06:00:00
06:15:00
06:30:00
06:45:00
07:00:00

'Dropna' cũng có thể được sử dụng để thả tất cả các cột trong đó một số giá trị là NAN. Điều này có thể đạt được bằng cách gán 1 cho tham số trục. Giá trị mặc định là sai, như chúng ta đã thấy trong ví dụ trước của chúng ta. Vì mọi cột từ các cảm biến của chúng tôi chứa các giá trị NAN, tất cả chúng sẽ biến mất:

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))
6

sensor1sensor2sensor3sensor4sensor5sensor6
thời gian
06:00:00Nan13.7 14.2 14.3 13.5 Nan
06:15:00Nan14.5 14.0 15.0 Nan14.7
06:30:00Nan15.1 14.8 15.3 14.0 14.2
06:45:0014.8 14.5 15.6 15.2 14.7 Nan
07:00:0015.0 Nan15.7 15.6 14.0 Nan
07:15:0015.2 15.2 14.6 15.3 15.5 14.9
07:30:00Nan15.3 15.6 Nan14.7 15.1

'Dropna' cũng có thể được sử dụng để thả tất cả các cột trong đó một số giá trị là NAN. Điều này có thể đạt được bằng cách gán 1 cho tham số trục. Giá trị mặc định là sai, như chúng ta đã thấy trong ví dụ trước của chúng ta. Vì mọi cột từ các cảm biến của chúng tôi chứa các giá trị NAN, tất cả chúng sẽ biến mất:

import math
n1 = math.nan
print(n1)
print(math.isnan(n1))
7

Chúng ta hãy thay đổi nhiệm vụ của mình: Chúng tôi chỉ muốn loại bỏ tất cả các hàng, chứa nhiều hơn một giá trị NAN. Tham số 'Thresh' là lý tưởng cho nhiệm vụ này. Nó có thể được đặt thành số tối thiểu. 'Thresh' được đặt thành một giá trị số nguyên, xác định số lượng tối thiểu của các giá trị không phải NAN. Chúng tôi có sáu giá trị nhiệt độ trong mỗi hàng. Đặt 'Thresh' thành 5 Đảm bảo rằng chúng tôi sẽ có ít nhất 5 phao hợp lệ trong mỗi hàng còn lại:
thời gian
06:00:0013.925000
06:15:0014.550000
06:30:0014.680000
06:45:0014.960000
07:00:0015.075000
07:15:0015.116667

Đào tạo Python sống

Hướng dẫn how do i fix nan in python? - làm cách nào để sửa nan trong python?

Các khóa học trực tuyến sắp tới

Ghi danh ở đây

Tại sao tôi lại nhận được Nan ở Python?

Nan có nghĩa là không phải là một số, điều này là do bên trong chức năng khối lập phương của bạn, bạn không gọi hàm vuông, nhưng nhận được nội dung của nó. Thay đổi trả về x * vuông; với return x * vuông (x); Và nó nên hoạt động.inside your cube function, you're not calling the square function, but getting it's contents. Change return x * square; with return x * square(x); and it should work.

Làm cách nào để thay thế NAN bằng 0 trong Python?

Bạn cũng có thể sử dụng df.replace (np.nan, 0) để thay thế tất cả các giá trị NAN bằng 0.Điều này thay thế tất cả các cột của DataFrame bằng 0 cho các giá trị NAN.df. replace(np. nan,0) to replace all NaN values with zero. This replaces all columns of DataFrame with zero for Nan values.

Làm cách nào để thay đổi giá trị nan trong Python?

Thay thế các giá trị NAN bằng số không trong Pandas DataFrame..
.
.
(3) Đối với toàn bộ dữ liệu sử dụng gấu trúc: df.fillna (0).

Làm thế nào để Python xử lý NAN?

Chúng ta có thể tạo nó với "float":..
n1 = float ("nan") n2 = float ("nan") n3 = float ("nan") n4 = float ("nan") in (n1, n2, n3, n4) ....
Nhập toán N1 = Toán.....
in (n1 == n2) in (n1 == 0) in (n1 == 100) in (n2 <0) ....
Nhập gấu trúc dưới dạng pd df = pd.....
trung bình_temp_series = df.....
Cảm biến = DF.....
# Thực hành tốt nhất: DF = DF ..