Pandas詳解十一之Fillna填充缺失資料
阿新 • • 發佈:2019-02-16
約定:
import pandas as pd
import numpy as np
from numpy import nan as NaN
填充缺失資料
fillna()是最主要的處理方式了。
df1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])
df1
程式碼結果:
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 2.0 | 3.0 |
1 | NaN | NaN | 2.0 |
2 | NaN | NaN | NaN |
3 | 8.0 | 8.0 | NaN |
- 用常數填充:
df1.fillna(100)
程式碼結果:
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 2.0 | 3.0 |
1 | 100.0 | 100.0 | 2.0 |
2 | 100.0 | 100.0 | 100.0 |
3 | 8.0 | 8.0 | 100.0 |
- 通過字典填充不同的常數:
df1.fillna({0:10,1:20,2:30})
程式碼結果:
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 2.0 | 3.0 |
1 | 10.0 | 20.0 | 2.0 |
2 | 10.0 | 20.0 | 30.0 |
3 | 8.0 | 8.0 | 30.0 |
- 傳入inplace=True直接修改原物件:
df1.fillna(0,inplace=True)
df1
程式碼結果:
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 2.0 | 3.0 |
1 | 0.0 | 0.0 | 2.0 |
2 | 0.0 | 0.0 | 0.0 |
3 | 8.0 | 8.0 | 0.0 |
- 傳入method=” “改變插值方式:
df2=pd.DataFrame(np.random.randint(0,10,(5,5)))
df2.iloc[1:4,3]=NaN;df2.iloc[2:4,4]=NaN
df2
程式碼結果:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 6 | 6 | 2 | 4.0 | 1.0 |
1 | 4 | 7 | 0 | NaN | 5.0 |
2 | 6 | 5 | 5 | NaN | NaN |
3 | 1 | 9 | 9 | NaN | NaN |
4 | 4 | 8 | 1 | 5.0 | 9.0 |
df2.fillna(method='ffill')#用前面的值來填充
程式碼結果:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 6 | 6 | 2 | 4.0 | 1.0 |
1 | 4 | 7 | 0 | 4.0 | 5.0 |
2 | 6 | 5 | 5 | 4.0 | 5.0 |
3 | 1 | 9 | 9 | 4.0 | 5.0 |
4 | 4 | 8 | 1 | 5.0 | 9.0 |
- 傳入limit=” “限制填充個數:
df2.fillna(method='bfill',limit=2)
程式碼結果:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 6 | 6 | 2 | 4.0 | 1.0 |
1 | 4 | 7 | 0 | NaN | 5.0 |
2 | 6 | 5 | 5 | 5.0 | 9.0 |
3 | 1 | 9 | 9 | 5.0 | 9.0 |
4 | 4 | 8 | 1 | 5.0 | 9.0 |
- 傳入axis=” “修改填充方向:
df2.fillna(method="ffill",limit=1,axis=1)
程式碼結果:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 6.0 | 6.0 | 2.0 | 4.0 | 1.0 |
1 | 4.0 | 7.0 | 0.0 | 0.0 | 5.0 |
2 | 6.0 | 5.0 | 5.0 | 5.0 | NaN |
3 | 1.0 | 9.0 | 9.0 | 9.0 | NaN |
4 | 4.0 | 8.0 | 1.0 | 5.0 | 9.0 |
謝謝大家的瀏覽,
希望我的努力能幫助到您,
共勉!