缺失值处理
查看每列缺失值的数量
Sum(pd.isnull(‘df’) )
可以将na_values选项传递到 pd.read_csv来清理它们。我们还可以指定某列的类型是字符串,而不是浮点。
na_values = ['NO CLUE', 'N/A', '0']
requests = pd.read_csv('../data/311-service-requests.csv', na_values=na_values, dtype={'某列': str})
删除法
默认对行进行操作
df.dropna()会删除任意含有缺失值的行
df.drop(how=all)只删除全是缺失值的行
填补法
1) 使用0填充
df.fillna(0)
2) 前向填充和后向填充
df.fillna(method=ffill)
df.fillna(method=bfill)
3)常量填充, 或者均值填充,中位数填充
df.fillna({‘列1’: 2,’列2’: 3})
插值法
插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。
举例:自定义列向量拉格朗日插值函数
#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
from scipy.interpolate import lagrange #导入拉格朗日插值函数
def ployinterp_column(s, n, k=5):
y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数
y = y[y.notnull()] #剔除空值
return lagrange(y.index, list(y)) #插值并返回插值结果
#逐个元素判断是否需要插值
for i in data.columns:
for j in range(len(data)):
if (data[i][j]).isnull(): #如果为空即插值。
data[i][j] = ployinterp_column(data[i], j)
数据规范化
会作用于每一列
(data - data.min())/(data.max() - data.min()) #最小-最大规范化
(data - data.mean())/data.std() #零-均值规范化
替换值
ata = Series([1., -999., 2., -999., -1000., 3.])
data.replace(-999, np.nan)
data.replace([-999, -1000], np.nan)
data.replace([-999, -1000], [np.nan, 0])
data.replace({-999: np.nan, -1000: 0})