数据清洗
pandas使用浮点数NaN表示浮点和非浮点数组中的缺失数据,它只是一个便于被检测出来的标志而已。python内置的None值也会被当做NA处理。
(1)查找了缺失值:
首先利用data.info(),观察每个数据列数据相关情况;
然后利用:data.isnull().sum(),查看所有列中是NA的数据,并得到NA数据的个数;
data['Age'].isnull().sum查看单列的数据NA情况
(2)对缺失值进行处理
a)填入具体的值
data[data['Age']==None]=0
data[data['Age'].isnull()]=0
data[data['Age']==np.nan]=0
b)删除
dropna:根据各标签的值中是否存在缺失的数据对轴标签进行过滤,可通过阀值调节对缺失值的容忍度
data.dropna(how='all‘,axis=1,thresh=3)
data[data.notnull()]
fillna:用指定值或插值方法(如ffil或bfill)填充缺失数据
isnull:返回一个含有布尔值的对象 这些布尔值表示哪些值是缺失值/NA
notnull:isnull的否定式
重复值观察与处理
df.duplicated():方法返回的是一个布尔值Series,与之前的出现的行进行对比,是否存在重复行,如果重复则返回True
#df.duplicated(‘ID’):某列查找重复值
#筛选出重复行:df[df.duplicated(‘ID’)]
#筛选非重复行:df[df.duplicated(‘ID’)==False]
df.drop_duplicates():返回一个新的DATa Frame数组,返回的数组就是duplicated中False的部分
#df.drop_duplicates(inplase=True):如果需要直接将原数据修改,需要加参数inplase
特征观察与处理
我们对特征进行一下观察,可以把特征大概分为两大类:
数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征。
数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析。
Python实现连续数据的离散化处理主要基于两个函数:pandas.cut和pandas.qcut,第一个根据指定分界点对连续数据进行分箱处理(按变量大小进行分类);第二个对指定箱子的数量对连续数据进行等宽分箱处理(按变量数量进行分类,所谓等宽指的是每个箱子中的数量是相同的)
df['AgeBand']=pd.cut(df['Age'],[0,5,15,30,50,80],labels=['1','2','3','4','5'])
默认的左开右闭,增加参数right=Flase,改变为左闭右开;如果向cut传递是箱的数量而不是确切的边界,则它会根据数据最小值和最大值计算等长箱,pd.cut(data,4,precision=2)
处理类别数据:可分为标称特征(nominal feature)和有序特征(ordinal feature),有序特征就是类别值是有序的或者可以排序,如衣服的尺寸。
为了确保模型可以正确使用有序特征,需要将类别字符串换为整数,需要手工定义相应的映射,利用pandas的map()函数进行。
定义一个size_mapping={……}的字典;
然后df['size']=df['size'p].map(size_mapping)
类别的编码
独热编码