資料搜集過程中,難免會遇到有缺失(空)值的部份,如何處理空值才能將降低其對於資料處理的影響力,也是資料分析的必修課。
import pandas as pd
data = [[8,7,6,5,4], [3,4,2,9,5], [4,6,7,2,8], [2,7,6,3,9], [6,None,4,None,3]]
df1=pd.DataFrame(data, index=['小明','小美','小英','小玉','小翔'], columns=['蘋果','芭樂','香蕉','橘子','檸檬'])
print(df1)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7.0 6 5.0 4
小美 3 4.0 2 9.0 5
小英 4 6.0 7 2.0 8
小玉 2 7.0 6 3.0 9
小翔 6 NaN 4 NaN 3
1.查詢空值資料
df1.isnull()
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 False False False False False
小美 False False False False False
小英 False False False False False
小玉 False False False False False
小翔 False True False True False
空值資料總數
df1.isnull().sum()
執行結果:
蘋果 0
芭樂 1
香蕉 0
橘子 1
檸檬 0
dtype: int64
非空值部份
df1.notnull()
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 True True True True True
小美 True True True True True
小英 True True True True True
小玉 True True True True True
小翔 True False True False True
df1.notnull().sum()
執行結果:
芭樂 4
香蕉 5
橘子 4
檸檬 5
dtype: int64
2.移除空值
刪除DataFrame空值,會直接刪除整欄和整列
df1.dropna()
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7 6 5 4
小美 3 4 2 9 5
小英 4 6 7 2 8
小玉 2 7 6 3 9
3.填補空值
import pandas as pd
data = [[8,7,6,5,4], [3,4,2,9,5], [4,6,7,2,8], [6,None,4,None,3], [2,7,6,3,9]]
df1=pd.DataFrame(data, index=['小明','小美','小英','小玉','小翔'], columns=['蘋果','芭樂','香蕉','橘子','檸檬'])
print(df1)
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7.0 6 5.0 4
小美 3 4.0 2 9.0 5
小英 4 6.0 7 2.0 8
小玉 6 NaN 4 NaN 3
小翔 2 7.0 6 3.0 9
將空值以0填補
df1.fillna(0)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7.0 6 5.0 4
小美 3 4.0 2 9.0 5
小英 4 6.0 7 2.0 8
小玉 6 0.0 4 0.0 3
小翔 2 7.0 6 3.0 9
填入前一筆資料的數值
FI=df1.fillna(method='pad')
print(FI)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7.0 6 5.0 4
小美 3 4.0 2 9.0 5
小英 4 6.0 7 2.0 8
小玉 6 6.0 4 2.0 3
小翔 2 7.0 6 3.0 9
填入後一筆資料的數值
FB=df.fillna(method='bfill')
print(FB)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7.0 6 5.0 4
小美 3 4.0 2 9.0 5
小英 4 6.0 7 2.0 8
小玉 6 7.0 4 3.0 3
小翔 2 7.0 6 3.0 9
把空值改成該欄位的平均值
df1['芭樂'].fillna(value=df['芭樂'].mean())
小明 7.0
小美 4.0
小英 6.0
小玉 6.0
小翔 7.0
Name: 芭樂, dtype: float64
填補完空值了,明天將開始資探索部份囉~