1. 程式人生 > >Pandas學習筆記 - fillna()填充缺失資料

Pandas學習筆記 - fillna()填充缺失資料

使用fillna()函式填充缺失值
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(7,4))
df.loc[:4,1] = np.nan
df.loc[:2,2] = np.nan
df.loc[0,:] = np.nan
df
'''
0	1	2	3
0	NaN	NaN	NaN	NaN
1	-1.198558	NaN	NaN	0.227038
2	0.569026	NaN	NaN	-0.685095
3	-1.349993	NaN	-1.715748	-0.345816
4	-1.324344	NaN	0.755861	-0.003945
5	-1.089520	0.999640	-1.011059	1.030057
6	0.578654	-0.003776	0.820553	-2.133620
'''
# 用一個數字填充缺失值
df.fillna(0)
# 用前一個數據代替缺失值:method='pad';用後一個數據代替缺失值:method='bfill'
df.fillna(method = 'bfill')
# 用一個字串代替缺失值
df.fillna('unknown')
# 使用描述性統計的值代替缺失值,例如使用平均值代替缺失資料
df.fillna(df.mean())

根據不同的列進行缺失值處理
# 使用字典呼叫fillna,可以實現對不同的列填充不同的值
df.fillna({1:0.5,3:-1})
'''
0	1	2	3
0	NaN	0.500000	NaN	-1.000000
1	-1.198558	0.500000	NaN	0.227038
2	0.569026	0.500000	NaN	-0.685095
3	-1.349993	0.500000	-1.715748	-0.345816
4	-1.324344	0.500000	0.755861	-0.003945
5	-1.089520	0.999640	-1.011059	1.030057
6	0.578654	-0.003776	0.820553	-2.133620
'''
# 選擇對哪些列進行缺失值的處理
df.fillna(df.mean()[:2])
# 用limit限制每列可以替代缺失值的最大數目
df.fillna('unknown',limit = 1)

fillna預設返回新物件,可以使用inplace引數實現對現有物件進行直接修改
# inplace引數:修改呼叫者物件而不產生副本
_ = df.fillna(0,inplace=True)
df
'''
0	1	2	3
0	0.000000	0.000000	0.000000	0.000000
1	-1.198558	0.000000	0.000000	0.227038
2	0.569026	0.000000	0.000000	-0.685095
3	-1.349993	0.000000	-1.715748	-0.345816
4	-1.324344	0.000000	0.755861	-0.003945
5	-1.089520	0.999640	-1.011059	1.030057
6	0.578654	-0.003776	0.820553	-2.133620
'''