1. fillna()
适用于以列为单位的的缺省值填充
2.将特征规范化,标准化
要实现规范化与标准化,我们定义了两个辅助函数(data_standardize.py文件):
def normalize(col):
'''
规范化
'''
return (col - col.min()) / (col.max() - col.min())
def standardize(col):
'''
标准化
'''
return (col - col.mean()) / col.std()
原理:
要规范化数据,即让每个值都落在0和1之间,我们减去数据的最小值,并除以样本的范围。统计学上的范围指的是最大值与最小值的差。normalize(...)方法就是做的前面描述的工作:对数据的集合,减去最小值,除以范围。
标准化的过程类似:减去平均数,除以样本的标准差。这样,处理后的数据,平均数为0而标准差为1。standardize(...)方法做了这些处理:
csv_read['n_price_mean'] = normalize(csv_read['price_mean'])
csv_read['s_price_mean'] = standardize(csv_read['price_mean'])
3.分级数据【常用于处理直方图】
np.digitize()
首先介绍一下函数的用法
digitize(data,bins)函数是numpy的一个内置函数。让人感到很震惊的是,网上居然很少有关于这个函数用法的中文介绍。
先上代码:
import random as rd
data=[rd.randint(a=100,b=1000) for _ in range(20)]
bins=[200,300,400,500,600,700,800,900,1000]
print('data:',data)
print('bins:',bins)
print('np.digitize(data,bins):',np.digitize(data,bins))
运行结果如下:
Tips:digitize(data,bins)函数对data列表似乎没有什么要求,但是对bins列表是由要求的:要求bins雷暴汇总的数据要么是升序的要么是降序的,绝壁不能是随意的一堆数。
大家可以很清楚的看到,digitize(data,bins)函数执行的过程大概如下:相当于两层for循环。首先最外面的一层:顺序的遍历data列表,取出当前的一个数a,然后顺序的遍历bins列表,返回bins列表中某个数的索引,如何找呢? 规则如下:如果:bins列表是升序的,那么如果满足 bins[i-1]<=a<bins[i],那么就保存i,然后回到外层循环继续上面的操作,如果bins列表是降序的,那么如果满足 bins[i]<=a<bins[i-1],那么就保存i,当data列表遍历完之后,就返回由i组成的来源于bins的索引的一个索引列表。
4.将分类变量转换为简单变量
get_dummies(...)方法将分类变量转换为简单的变量。比如,考虑一个变量,以三种水平中的某一种作为值:
1 One
2 Two
3 Three
需要用三列进行编码:
1 One 1 0 0
2 Two 0 1 0
3 Three 0 0 1
有时可用两列。如果有一个水平等效于null的话,我们可以这样做:
1 One 1 0
2 Two 0 1
3 Three 0 0
.get_dummies(...)方法的第一个参数是DataFrame对象。columns参数指定了代码要处理的DataFrame的列(或某些列,因为可以传入列表)。通过指定前缀,我们告诉方法生成的列名以d打头;本例中生成的列会叫d_Condo。下划线是默认的,可以通过指定prefix_sep参数更改。
.get_dummies(...)方法的完整参数列表,参见:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html
详情参见