pandas中關於nan的處理

2021-08-30 04:13:36 字數 3903 閱讀 4210

在pandas中有個另類的存在就是nan,解釋是:not a number,不是乙個數字,但是它的型別確是乙個float型別。numpy中也存在關於nan的方法,如:np.nan

對於pandas中nan的處理,簡單的說有以下幾個方法。

檢視是否是nan, s1.isnull() 和 s1.notnull()

丟棄有nan的索引項,s1.dropna()

將nan填充為其他值,df2.fillna()

import numpy as np

import pandas as pd

from pandas import series, dataframe

n = np.nan

print

(type

(n))

# m =

1print

(n+m)

# nan 任何數字和nan進行計算,都是nan

# nan in series

s1 = series([1

,2, np.nan,3,

4], index=

['a'

,'b'

,'c'

,'d'

,'e'])

print

(s1)

'''a 1.0

b 2.0

c nan

d 3.0

e 4.0

dtype: float64

'''print

(s1.isnull())

# 返回 bool值,是 nan 的話,返回true

'''a false

b false

c true

d false

e false

dtype: bool

'''print

(s1.notnull())

# 非 nan , 返回true

'''a true

b true

c false

d true

e true

dtype: bool

'''# 去掉 有 nan 的索引項

print

(s1.dropna())

'''a 1.0

b 2.0

d 3.0

e 4.0

dtype: float64

'''# nan in dataframe

df = dataframe([[

1,2,

3],[np.nan,5,

6],[

7, np.nan,9]

,[np.nan, np.nan, np.nan]])

print

(df)

''' 0 1 2

0 1.0 2.0 3.0

1 nan 5.0 6.0

2 7.0 nan 9.0

3 nan nan nan

'''print

(df.isnull())

# df.notnull() 同理

''' 0 1 2

0 false false false

1 true false false

2 false true false

3 true true true

'''# 去掉 所有 有 nan 的 行, axis = 0 表示 行方向

df1 = df.dropna(axis=0)

print

(df1)

''' 0 1 2

0 1.0 2.0 3.0

'''# 表示在 列 的方向上。

df1 = df.dropna(axis=1)

print

(df1)

'''mpty dataframe

columns:

index: [0, 1, 2, 3]

'''# any 只要有 nan 就會刪掉。 all 是必須全是nan才刪除

df1 = df.dropna(axis=

0, how=

'any'

)print

(df1)

''' 0 1 2

0 1.0 2.0 3.0

'''# any 只要有 nan 就會刪掉。 all 全部是nan,才會刪除

df1 = df.dropna(axis=

0, how=

'all'

)print

(df1)

''' 0 1 2

0 1.0 2.0 3.0

1 nan 5.0 6.0

2 7.0 nan 9.0

'''df2 = dataframe([[

1,2,

3, np.nan],[

2, np.nan,5,

6],[np.nan,

7, np.nan,9]

,[1, np.nan, np.nan, np.nan]])

print

(df2)

''' 0 1 2 3

0 1.0 2.0 3.0 nan

1 2.0 nan 5.0 6.0

2 nan 7.0 nan 9.0

3 1.0 nan nan nan

'''print

(df2.dropna(thresh=

none))

'''empty dataframe

columns: [0, 1, 2, 3]

index:

'''print

(df2.dropna(thresh=2)

)# thresh 表示乙個範圍,如:每一行的nan > 2,就刪除

''' 0 1 2 3

0 1.0 2.0 3.0 nan

1 2.0 nan 5.0 6.0

2 nan 7.0 nan 9.0

'''# 將nan進行填充

print

(df2.fillna(value=1)

)'''

0 1 2 3

0 1.0 2.0 3.0 1.0

1 2.0 1.0 5.0 6.0

2 1.0 7.0 1.0 9.0

3 1.0 1.0 1.0 1.0

'''# 可以 為指定列 填充不同的 數值

print

(df2.fillna(value=))

# 指定每一列 填充的數值

''' 0 1 2 3

0 1.0 2.0 3.0 3.0

1 2.0 1.0 5.0 6.0

2 0.0 7.0 2.0 9.0

3 1.0 1.0 2.0 3.0

'''# 以下兩個例子需要說明的是:對dataframe進行dropna,原來的dataframe不會改變

print

(df1.dropna())

''' 0 1 2

0 1.0 2.0 3.0

'''print

(df1)

''' 0 1 2

0 1.0 2.0 3.0

1 nan 5.0 6.0

2 7.0 nan 9.0

'''

pandas 17 關於nan的處理

在pandas中有個另類的存在就是nan,解釋是 not a number,不是乙個數字,但是它的型別確是乙個float型別。numpy中也存在關於nan的方法,如 np.nan 對於pandas中nan的處理,簡單的說有以下幾個方法。檢視是否是nan,s1.isnull 和 s1.notnull ...

Pandas中NaN缺失值處理

三 小結 讀取電影資料 pandas刪除缺失值,使用dropna的前提是,缺失值的型別必須是np.nan 不修改原資料 movie.dropna 可以定義新的變數接受或者用原來的變數名 data movie.dropna 替換存在缺失值的樣本的兩列 替換填充平均值,中位數 movie revenue...

關於NaN的比較

wtf?nan nan,返回的結果是false?也許這是因為我們沒有使用嚴格等價 操作?var x math.sqrt 2 var y math.log 1 console.log x y false也不對。因為有很多方法來表示乙個非數字,所以乙個非數字不會等於另乙個為nan的非數字,它還是有一定道...