1. 程式人生 > 實用技巧 >資料分析 三 pandas空值清洗

資料分析 三 pandas空值清洗

有兩種丟失資料:

  • None
  • np.nan(NaN)
import pandas as pd
import numpy as np
from pandas import Series,DataFrame

1. None

None是Python自帶的,其型別為python object。因此,None不能參與到任何計算中。

print(type(None))

<class 'NoneType'>

2. np.nan(NaN)

np.nan是浮點型別,能參與到計算中。但計算的結果總是NaN

print(type(np.nan))

<class 'float'>

np.nan +1 ==> nan

3. pandas中的None與NaN

1) pandas中None與np.nan都視作np.nan

建立DataFrame
df = DataFrame(data= np.random.randint(0,100,size=(8,10)))
df

#將某些陣列元素賦值為nan

df.iloc[2,5]=None
df.iloc[5,3]=None
df.iloc[7,7]=np.nan
df  # 結果都是nan

2) pandas處理空值操作

# 刪行
# 相鄰賦值

  • isnull()
  • notnull()
  • dropna(): 過濾丟失資料
  • fillna(): 填充丟失資料

(1)判斷函式

  • isnull()
  • notnull()
df.isnull().any(axis=1) 



=======================
0    False
1    False
2     True
3    False
4    False
5     True
6    False
7     True
dtype: bool
df.notnull().all(axis=1)

============
0     True
1     True
2    False
3     True
4 True 5 False 6 True 7 False dtype: bool

固定搭配 isnull+any
notnull+all

    •   df.notnull/isnull().any()/all()
#過濾df中的空值(只保留沒有空值的行)
df.loc[df.notnull().all(axis=1)]

df.dropna()就可以替代上面多步的操作,一步到位

     可以選擇過濾的是行還是列(預設為行):axis中0表示行,1表示的列

df.dropna(axis=0) 

(3) 填充函式 Series/DataFrame

  • fillna():value和method引數
  • method=> bfill 後覆蓋, ffill 前覆蓋 axis =>0列 1行

可以選擇前向填充還是後向填充

df.fillna(method='bfill',axis=0)   # 列的後覆蓋

============================================

練習7:

  1. 簡述None與NaN的區別

  2. 假設張三李四參加模擬考試,但張三因為突然想明白人生放棄了英語考試,因此記為None,請據此建立一個DataFrame,命名為ddd3

  3. 老師決定根據用數學的分數填充張三的英語成績,如何實現? 用李四的英語成績填充張三的英語成績?

============================================