缺失数据比较多的情况下,可以直接滤除,缺失数据比较少时,对数据进行填充就很有必要了。
数据填充函数fillna()默认参数如下:
fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
import numpy as np
from numpy import nan
import pandas as pd
data=pd.DataFrame(np.arange(3,19,1).reshape(4,4),index=list('abcd'))
print(data)
data.iloc[0:2,0:3]=nan
print(data)
0 1 2 3
a NaN NaN NaN 6
b NaN NaN NaN 10
c 11.0 12.0 13.0 14
d 15.0 16.0 17.0 18
print(data.fillna(0)) ### 用0填充缺失数据
0 1 2 3
a 0.0 0.0 0.0 6
b 0.0 0.0 0.0 10
c 11.0 12.0 13.0 14
d 15.0 16.0 17.0 18
print(data.fillna(data.mean())) ### 用每列特征的均值填充缺失数据
0 1 2 3
a 13.0 14.0 15.0 6
b 13.0 14.0 15.0 10
c 11.0 12.0 13.0 14
d 15.0 16.0 17.0 18
print(data.fillna(data.median())) ### 用每列特征的中位数填充缺失数据
0 1 2 3
a 13.0 14.0 15.0 6
b 13.0 14.0 15.0 10
c 11.0 12.0 13.0 14
d 15.0 16.0 17.0 18
print(data.fillna(method='bfill')) ### 用相邻后面(back)特征填充前面空值
0 1 2 3
a 11.0 12.0 13.0 6
b 11.0 12.0 13.0 10
c 11.0 12.0 13.0 14
d 15.0 16.0 17.0 18
data=pd.DataFrame(np.arange(3,19,1).reshape(4,4),index=list('abcd'))
data.iloc[1:2,:]=nan
print(data)
0 1 2 3
a 3.0 4.0 5.0 6.0
b NaN NaN NaN NaN
c 11.0 12.0 13.0 14.0
d 15.0 16.0 17.0 18.0
print(data.fillna(method='bfill')) ### 用相邻前面(before)特征填充后面空值
0 1 2 3
a 3.0 4.0 5.0 6.0
b 3.0 4.0 5.0 6.0
c 11.0 12.0 13.0 14.0
d 15.0 16.0 17.0 18.0
values={0:10,1:20,2:30}
print(data.fillna(value=values)) ### 用字典对不同的列填充不同的缺失数据
0 1 2 3
a 10.0 20.0 30.0 6
b 10.0 20.0 30.0 10
c 11.0 12.0 13.0 14
d 15.0 16.0 17.0 18