pandas中的空值處理


 


1.空值

1.1 有兩種丟失數據:

  • None: Python自帶的數據類型 不能參與到任何計算中
  • np.nan: float類型 能參與計算,但結果總是nan
# None+2 # 報錯 # np.nan + 2 # 值仍然是nan

1.2 np.nan(NaN)

數組直接運算會得到nan,但可以使用np.nansum()函數來計算nan,此時視nan為0。

ndarr = np.array([1,2,3,np.nan])
np.sum(ndarr)
np.nansum(ndarr)

Series和DataForm可以直接處理nan

s1 = Series([1,2,3,np.nan])
s1

0    1.0
1    2.0
2    3.0
3 NaN dtype: float64 s1.sum() 6.0
df1 = DataFrame([1,2,3,np.nan])
df1

df1.sum()
0    6.0 dtype: float64

1.3 pandas中的None與NaN

s1 = Series([1,2,3,np.nan,None])  # 
s1 0 1.0 1 2.0 2 3.0 3 NaN 4 NaN dtype: float64
df1 = DataFrame([1,2,3,np.nan,None])  # Series和DataFrame都會自動把None轉換成NaN 然后 運算的時候會把NaN當成0 df1

2. 空值檢測與空值處理

  • isnull()
  • notnull()
  • dropna(): 過濾丟失數據
  • fillna(): 填充丟失數據

2.1 空值檢測

  • isnull()
  • notnull()

用randint創建一個5*5的DataFrame作為例子

df = DataFrame(data=np.random.randint(0,100,size=(5,5)),columns=list('abcde')) df.loc[1,'a'] = np.nan df.loc[3,'b'] = np.nan df.loc[0,'e'] = np.nan

isnull配合any使用,可以查看每一行是否存在空值

可以控制axis改變方向,查看某一列是否存在空值

2.2 空值過濾

  • dropna()

可以選擇過濾的是行還是列(默認為行)

df.dropna()  # 默認 保留沒有空值的行

也可以選擇過濾的方式 how = 'all',代表全部為空則刪除

2.3 空值填充

  • fillna()

# value=None 默認情況
df.fillna(value=50)

也可以選擇從前面找值來填充還是從后面找值來填充

# method指的是 如何對空值進行填充
# 'bfill'從后面找值來填充 ffill從前面找值來填充
# df.fillna(method='bfill')
# df.fillna(method='ffill') # 默認是縱向(從相鄰樣本的 同一特征中找值)

# df.fillna(method='bfill',axis=0) # 豎向
df.fillna(method='bfill',axis=1) # 橫向

還可以限定最多填充幾個連續的NaN

df.fillna(method='bfill',limit=1,inplace=True) # 用來限制填充多少個

fillna()方法總結:

# value=None, method=None, axis=None, inplace=False, limit=None # value直接指定 用什么值來填充 # method 指定填充方法 # axis 指定填充值的方向 # inplace 指的是是否對原df進行替換 # limit 限制填充的個數 df.fillna()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM