0%

<数据分析> 深度学习数据预处理(pandas篇)

摘要:数据预处理的四种技术:数据合并,数据清洗,数据标准化,数据转换

只是做自己的学习笔记使用,如有错误请评论区指出。
数据预处理的四种技术:数据合并,数据清洗,数据标准化,数据转换

导包和数据集

工具使用pandas和numpy

1
2
3
4
5
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]

查看数据维度以及类型

1
2
3
4
5
6
#查看前五条数据
print train_df.head(5)
#查看每列数据类型以及nan情况
print train_df.info()
#获得所有object属性
print train_data.describe(include=['O']).columns

操作训练集中的信息

1
2
3
4
#统计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')) 

在这里插入图片描述

堆叠

1
2
3
#方法一:
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

1
2
#方法二:利用append实现纵向堆叠,前提是合并的两张表列名应该一致
data1.append(data2,ignore_index=False)

通过主键合并数据

具体实例可见 链接
主键合并就是通过一个或者多个键将两个数据集的行连接起来。类似于sql中的join。

1
2
3
4
5
#通用表达
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(行索引)作为主键进行合并

还可以通过不同的列名作为主键进行融合

1
pd.merge(data_1,data_2,how = 'inner',left_on = 'key1',right_on = 'key2') # 左右的合并主键分别是key1和key2。

通过索引为主键

1
pd.merge(data_1,data_2,how = 'inner',left_index = True,right_index=True)

join方法

1
2
3
4
#通用表达
dataframe.join(self,other,on=None,how=‘left’,lsuffix=’’,resuffix=’’,sort=False)
#例如
data_1.join(data_2,on = 'key2',lsuffix=' ',rsuffix=' ')

在这里插入图片描述

2.清洗数据

检测重复值

1
2
3
4
5
dataframe.drop_duplicates(subset=None,keep=‘first’,inplace=False)

#例如
data_repeat.drop_duplicates(subset='key2')
data_repeat.drop_duplicates(subset=['key1','key2'])

在这里插入图片描述

检测与处理缺失值

检测

1
2
3
4
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() # 统计一下缺失值数目,结果将按列缺失值的个数

处理
处理缺失值的方法主要有:删除法,替换法,插值法。

删除缺失值

1
2
3
#其中subset指出需要删除空值的列名,与how属性联动才可以使用
dataframe.dropna(axis = 0,how = ‘any’,thresh=None,subset=None,inplace = None)
# thresh属性 表示能够容忍生下来的非缺失值的个数。

上面的thresh属性存在疑问
在这里插入图片描述
替换缺失值

1
2
3
4
dataframe.fillna(value = None,method=None,axis=None,inpalce=False,limit=None)

#例如:使用111代替缺失值
data_null.fillna(111)

在这里插入图片描述

3.数据的标准化

数据标准化

4.数据的转换

见链接

numpy操作数据