Hướng dẫn assign nan python - gán nan trăn

Hướng dẫn assign nan python - gán nan trăn
Đội câu trả lời giáo dục

NaN, không phải là một số, là một loại dữ liệu số được sử dụng để biểu thị bất kỳ giá trị nào không được xác định hoặc không thể tin được.not a number, is a numeric data type used to represent any value that is undefined or unpresentable.

Ví dụ, 0/0 không được xác định là một số thực và do đó, được đại diện bởi NAN. Căn bậc hai của một số âm là một số tưởng tượng không thể được biểu diễn dưới dạng một số thực, vì vậy, nó được biểu thị bằng NAN.The square root of a negative number is an imaginary number that cannot be represented as a real number, so, it is represented by NaN.

NAN cũng được gán cho các biến, trong một tính toán, không có giá trị và vẫn chưa được tính toán.

Lưu ý: Nan không giống như

import math

n1 = math.nan

print(n1)

print(math.isnan(n1))

0 trong Pythonnot the same as

import math

n1 = math.nan

print(n1)

print(math.isnan(n1))

0 in Python


Gán một nan

Chúng ta có thể tạo một giá trị NAN trong Python bằng cách sử dụng

import math

n1 = math.nan

print(n1)

print(math.isnan(n1))

1, như được hiển thị bên dưới:

Lưu ý: Lưu ý rằng các NAN NAN được chuyển đến phao không nhạy cảm với trường hợp. Tất cả 4 biến số xuất hiện dưới dạng nan.not case sensitive. All of the 4 variables come out as nan.

n1 = float("nan")

n2 = float("Nan")

n3 = float("NaN")

n4 = float("NAN")

print n1, n2, n3, n4

Lưu ý: Bạn cũng có thể sử dụng thư viện Python từ

import math

n1 = math.nan

print(n1)

print(math.isnan(n1))

2 thay vì phao. Ví dụ, bạn có thể thực hiện thập phân (Nan Nan) thay vì nổi (Nan Nan).

NAN cũng là một phần của mô -đun toán học trong Python 3.5 trở đi. Điều này có thể được sử dụng như hình dưới đây:Python 3.5 and onwards. This can used as shown below:

import math

n1 = math.nan

print(n1)

print(math.isnan(n1))

import math

n1 = math.nan

print(n1)

print(math.isnan(n1))

3 được sử dụng để kiểm tra xem một biến nhất định có phải là NAN hay không. Chúng tôi không thể sử dụng toán tử so sánh thông thường,

import math

n1 = math.nan

print(n1)

print(math.isnan(n1))

4, để kiểm tra NAN. Nan không bằng bất cứ điều gì (thậm chí không phải chính nó!).cannot use the regular comparison operator,

import math

n1 = math.nan

print(n1)

print(math.isnan(n1))

4, to check for NaN. NaN is not equal to anything (not even itself!).

Bản quyền © 2022 Giáo dục, Inc. Tất cả quyền được bảo lưu

Một vấn đề khi phân tích dữ liệu là xử lý missing data. Pandas đã làm cho việc này dễ dàng nhất có thể.  
 

Series

Tạo một pandas series chứa các giá trị NaN.

Nếu chúng ta nhìn lại một lần nữa trong ví dụ trước, ta có thể thấy rằng chỉ mục của chuỗi giống như các khóa của dictionary mà chúng ta sử dụng để tạo ra các sales. Bây giờ, chúng ta muốn sử dụng một chỉ mục không chồng chéo với các khóa dictionary. Chúng ta đã thấy rằng chúng ta có thể truyền vào list hoặc tuple với đối số từ khoá 'index' để xác định chỉ mục. Trong ví dụ tiếp theo, list (hoặc tuple) được truyền cho tham số keyword 'index' sẽ không tương đương các khoa trong dictionary. Điều này có nghĩa là một số hãng điện thoại từ dictionay sẽ bị thiếu, ví dụ hai hãng ("LG" và "HTC") không xuất hiện trong dictionary.

>>> import numpy as np

>>> import pandas as pd

>>> phones = ['Iphone',"Samsung Note","Samsung S","Nokia"]

>>> quantities = [10,12,30,100]

>>> sales = dict(zip(phones, quantities))

>>> S = pd.Series(sales)

>>> brands = ["Iphone","Samsung Note","Nokia","Samsung S","LG","HTC"]

>>> SS = pd.Series(sales,index=brands)

>>> SS

Iphone           10.0

Samsung Note     12.0

Nokia           100.0

Samsung S        30.0

LG                NaN

HTC               NaN

dtype: float64

>>>

Chúng ta có thể thấy rằng các brands, mà không có trong từ điển sales, nhận giá trị NaN. NaN là viết tắt của "not a number". Nó cũng có thể được xem là có nghĩa là "missing" trong ví dụ của chúng ta.

Nếu trong quá trình tạo Series mà ta truyền một dictionary, ứng với key có giá trị là “None” thì đối tượng Series tạo thành sẽ nhận giá trị NaN.

>>> d = {"a":23, "b":45, "c":None, "d":0}

>>> S = pd.Series(d)

>>> print(S)

a    23.0

b    45.0

c     NaN

d     0.0

dtype: float64

>>>

 Dataframe

Tạo một dataframe tồn tại giá trị NaN.

>>> import numpy as np

>>> import pandas as pd

>>> df = pd.DataFrame(np.random.randn(5, 4)*100,columns = list("ABCD"))

>>> df

            A          B           C           D

0  193.958156  76.560508 -144.899007  -29.874618

1  196.163029  22.368007   15.188653 -102.040442

2  -22.597828  27.841637  -23.202380   50.040193

3 -111.654480 -25.036501   41.283627  -25.941029

4  -92.212283  77.257557 -122.999865   59.863213

>>> df = df[df>0]

>>> df

            A          B          C          D

0  193.958156  76.560508        NaN        NaN

1  196.163029  22.368007  15.188653        NaN

2         NaN  27.841637        NaN  50.040193

3         NaN        NaN  41.283627        NaN

4         NaN  77.257557        NaN  59.863213

>>>

Phương thức isnull() và notnull() để kiểm tra phần tử là NaN hay không là NaN tương ứng.

>>> SS.isnull()

Iphone          False

Samsung Note    False

Nokia           False

Samsung S       False

LG               True

HTC              True

dtype: bool

>>> SS.notnull()

Iphone           True

Samsung Note     True

Nokia            True

Samsung S        True

LG              False

HTC             False

dtype: bool

>>> print "working with dataframe"

working with dataframe

>>> df['A'].isnull()

0    False

1    False

2     True

3     True

4     True

Name: A, dtype: bool

>>> df['A'].notnull()

0     True

1     True

2    False

3    False

4    False

Name: A, dtype: bool

>>> df.isnull()

       A      B      C      D

0  False  False  True  True

1  False  False  False  True

2  True   False   True  False

3  True   True  False  True

4  True  False   True  False

>>> print “Hang co chua phan tu null”

>>> df.isnull().any()

A    True

B     True

C     True

D    True

dtype: bool

>>> print “Cot co chua phan tu null”

>>> df.isnull().any(1)

0    True

1    True

2     True

3     True

4     True

dtype: bool

Loại bỏ missing data dùng .dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False).dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False)

Trong đó:

   axis: nhận giá trị mặc định là 0 –‘index’, 1-‘columns’

   how: ‘any’ sẽ drop axis đang xét nếu có bất gì phần tử NaN nào tồn tại, ‘all’ sẽ drop axis nếu toàn bộ phần tử đang xét nhận giá trị NaN.

>>> print “Drop các hàng có chứa phần tử là NaN trong series SS”

Drop các hàng có chứa phần tử là NaN trong series SS

>>> SS.dropna()

Iphone           10.0

Samsung Note     12.0

Nokia           100.0

Samsung S        30.0

dtype: float64

>>> print "working with dataframe"
working with dataframe
>>> df

            A          B          C          D

0  193.958156  76.560508        NaN        NaN

1  196.163029  22.368007  15.188653        NaN

2         NaN  27.841637        NaN  50.040193

3         NaN        NaN  41.283627        NaN

4         NaN  77.257557        NaN  59.863213

>>> df.dropna()

Empty DataFrame

Columns: [A, B, C, D]

Index: []

>>>

Gán gián trị mặc định cho “missing data” dùng hàm fillna(number)

>>> SS.fillna(10000000)
Iphone                10.0
Samsung Note          12.0
Nokia                100.0
Samsung S             30.0
LG              10000000.0
HTC             10000000.0
dtype: float64
>>> print "gan qua dictionary"
gan qua dictionary
>>> nafills = {"LG":9919191,"HTC":20}
>>> SS.fillna(nafills)
Iphone               10.0
Samsung Note         12.0
Nokia               100.0
Samsung S            30.0
LG              9919191.0
HTC                  20.0
dtype: float64
>>> print "working with dataframe"
working with dataframe
>>> print ("NaN replaced with '0':")
NaN replaced with '0':
>>> df.fillna(0)
            A          B          C          D
0  193.958156  76.560508   0.000000   0.000000
1  196.163029  22.368007  15.188653   0.000000
2    0.000000  27.841637   0.000000  50.040193
3    0.000000   0.000000  41.283627   0.000000
4    0.000000  77.257557   0.000000  59.863213
>>>

Ngoài cách fill các vị trí NaN với một hằng số như phía trên. Pandas còn cung cấp cho ta các lựa chọn khác, fill theo 2 cách sau: sử dụng phương thức pad/ffill để fill dữ liệu kiểu forward tức là missing data sẽ được fill bằng dữ liệu của hàng trước đó, hoặc kiểu thứ hai là bfill/backfill sẽ mang ý nghĩa ngược lại. Cùng xem ví dụ sau:

>>> df

            A          B          C          D

0  193.958156  76.560508        NaN        NaN

1  196.163029  22.368007  15.188653        NaN

2         NaN  27.841637        NaN  50.040193

3         NaN        NaN  41.283627        NaN

4         NaN  77.257557        NaN  59.863213



>>> df.fillna(method='bfill')

            A          B          C          D

0  193.958156  76.560508  15.188653  50.040193

1  196.163029  22.368007  15.188653  50.040193

2         NaN  27.841637  41.283627  50.040193

3         NaN  77.257557  41.283627  59.863213

4         NaN  77.257557        NaN  59.863213

>>> df.fillna(method='ffill')

            A          B          C          D

0  193.958156  76.560508        NaN        NaN

1  196.163029  22.368007  15.188653        NaN

2  196.163029  27.841637  15.188653  50.040193

3  196.163029  27.841637  41.283627  50.040193

4  196.163029  77.257557  41.283627  59.863213

>>>

Kết Luận

Trong quá trình thao tác trên data, việc tập data đầu vào chưa chuẩn hóa có chứa nhiều vị trí missing là không thể tránh khỏi. Các bạn có thể sử dụng hai phương thức isnull()/notnull() để kiểm tra một phần tử là NaN hay không tương ứng. Sau đó tùy vào bài toán cụ thể mà sử dụng dropna() để drop các phần tử missing hay fillna() để gán giá trị mặc định cho vị trí missing. Chi tiết hơn về dropna() và fillna() các bạn có thể tham khảo thêm các trang sau:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html,

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html