数据处理
?缺失值处理查看每列缺失值的数量 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.,-1000.,3.]) ? data.replace(-999,np.nan) ? data.replace([-999,-1000],[np.nan,0]) ? data.replace({-999: np.nan,-1000: 0}) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |