在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的非數字,它還是有一定道...