在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 = 1
print(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中關於nan的處理
在pandas中有個另類的存在就是nan,解釋是 not a number,不是乙個數字,但是它的型別確是乙個float型別。numpy中也存在關於nan的方法,如 np.nan 對於pandas中nan的處理,簡單的說有以下幾個方法。檢視是否是nan,s1.isnull 和 s1.notnull ...
關於NaN的比較
wtf?nan nan,返回的結果是false?也許這是因為我們沒有使用嚴格等價 操作?var x math.sqrt 2 var y math.log 1 console.log x y false也不對。因為有很多方法來表示乙個非數字,所以乙個非數字不會等於另乙個為nan的非數字,它還是有一定道...
關於js new Date 出現NaN 的分析
簡介 在乙個專案中需要進行日期的格式化,後台傳到前端是時間的整數 date.gettime 當後台資料返回字串時,發現轉換日期時在ie下變成nan,但是真的是這樣嗎?接下來我們慢慢分析。此nan不為nan 程式 如下 var date new date d if date date.getfully...