只是做自己的学习笔记使用,如有错误请评论区指出。
数据预处理的四种技术:数据合并,数据清洗,数据标准化,数据转换
导包和数据集
工具使用pandas和numpy
import pandas as pd
import numpy as np
train_df =pd.read_csv('../datas/train.csv') # train set
test_df = pd.read_csv('../datas/test.csv') # test set
combine = [train_df, test_df]
查看数据维度以及类型
#查看前五条数据
print train_df.head(5)
#查看每列数据类型以及nan情况
print train_df.info()
#获得所有object属性
print train_data.describe(include=['O']).columns
操作训练集中的信息
#统计Title单列元素对应的个数
print train_df['Title'].value_counts()
#属性列删除(针对Name和Passengerld两列操作)
train_df = train_df.drop(['Name', 'PassengerId'], axis=1)
1.合并数据
建立关系表:
data1 = pd.DataFrame({'key1':list('aavde'),'key2':list('asdfs'),'key3':list(str(12345))})

data1 = pd.DataFrame(np.random.rand(3,3),index = list('abc'),columns = list('ABC'))

堆叠
#方法一:
pd.concat(objs,join=‘outer’, join_axes=None,ignore_index=False,
keys=None, levels=None, names=None, verify_interity=False, copy=True)
objs 接受用于合并的series,dataframe的组合。以列表的形式,eg:[data1,data2]其中data1和data2为两个二维表
axis 表示堆叠的轴向,默认axis为0,表示纵向堆叠,以行为主的堆叠方式
join 接受inner或outer。表示其他轴向上的索引是按交集还是并集进行合并,默认为outer;outer表示并集,不存在的关系其值用NaN代替;inner表示交集,结果仅返回无空值的行或者列(此处由axis的取值决定,0:列中无空值;1:行中无空值)
ignore_index 接受boolean.表示是否不保留连接轴上的索引,产生一组新索引range(toatal_length)默认为False
verify_intergrity 接受boolean,检查新连接的轴是否包含重复项。如果发现重复项,则引发异常。默认为False
#方法二:利用append实现纵向堆叠,前提是合并的两张表列名应该一致
data1.append(data2,ignore_index=False)
通过主键合并数据
具体实例可见 链接
主键合并就是通过一个或者多个键将两个数据集的行连接起来。类似于sql中的join。
#通用表达
pd.merge(left,right,how,on,left_on,right_on,left_index,right_index,sort,suffixes)
#例如;此时data_1与data_2的共同列名为key2.将其传给on。作为合并主键,进行交集合并,其中inner和outer的含义同上
pd.merge(data_1,data_2,on = 'key2',how = 'inner')

可以通过主键合并的情况如下:
1 左右数据有共同的列名,用共同的列名作为主键。此时使用on参数,传入共同的列名。合并后的数据列数为原来数据的列数和减去连接键的数量
2 使用不同列名主键进行合并
3 赋予left_index和right_index参数。使用原本数据的index(行索引)作为主键进行合并
还可以通过不同的列名作为主键进行融合
pd.merge(data_1,data_2,how = 'inner',left_on = 'key1',right_on = 'key2') # 左右的合并主键分别是key1和key2。
通过索引为主键
pd.merge(data_1,data_2,how = 'inner',left_index = True,right_index=True)
join方法
#通用表达
dataframe.join(self,other,on=None,how=‘left’,lsuffix=’’,resuffix=’’,sort=False)
#例如
data_1.join(data_2,on = 'key2',lsuffix=' ',rsuffix=' ')

2.清洗数据
检测重复值
dataframe.drop_duplicates(subset=None,keep=‘first’,inplace=False)
#例如
data_repeat.drop_duplicates(subset='key2')
data_repeat.drop_duplicates(subset=['key1','key2'])

检测与处理缺失值
检测
data_null = pd.DataFrame({'key1':[np.nan,1,2,3,4,5,np.nan],'key2':[1,2,3,4,5,6,np.nan]})
data_null.isnull() # 以true或者false来表示是否是缺失值。
data_null.isnull().sum() # 统计一下缺失值数目,结果将按列缺失值的个数
处理
处理缺失值的方法主要有:删除法,替换法,插值法。
删除缺失值
#其中subset指出需要删除空值的列名,与how属性联动才可以使用
dataframe.dropna(axis = 0,how = ‘any’,thresh=None,subset=None,inplace = None)
# thresh属性 表示能够容忍生下来的非缺失值的个数。
上面的thresh属性存在疑问

替换缺失值
dataframe.fillna(value = None,method=None,axis=None,inpalce=False,limit=None)
#例如:使用111代替缺失值
data_null.fillna(111)

浙公网安备 33010602011771号