一、数据清洗及特征处理
一般情况下,获取的数据中会存在一些NAN值,关于None和NAN的区别如下:
None能够直接被导入数据库作为空值处理, 包含NaN的数据导入时会报错。
numpy和pandas的很多函数能处理NaN,但是如果遇到None就会报错。
None和NaN都不能被pandas的groupby函数处理,包含None或者NaN的组都会被忽略。
为避免其影响到后续的数据分析,需要提前对它进行处理:
- 缺失值观察与处理
df[ ] : 只取某列的值,是键值, 返回Series类型
df[[ ]] :取完全的某列,是表格,返回DataFrame类型
df.isnull().sum()
df.fillna(119).head(3)
df = df.drop_duplicates()
- 特征观察与处理
数值型特征一般可以直接用于模型的训练,文本型特征往往需要转换成数值型特征才能用于建模分析。
df['Avgage'] = pd.cut(df['Age'],5,labels = [1,2,3,4,5])
df['Cutage'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
df['Change_sex'] = df['Sex'].replace(['male','female'],[1,0])
df['Change_sex1'] = df['Sex'].map({'male':1,'female':0})
x = pd.get_dummies(df['Avgage'])
df1 = pd.concat([df,x],axis = 1)
二、数据重构
可以完成数据合并的方法有pd.concat,join,append等。
- 数据合并
result_up = pd.concat([df_left_up,df_right_up],axis = 1)
result_down = pd.concat([df_left_down,df_right_down],axis = 1)
result = pd.concat([result_up,result_down],axis = 0)
result1 = df_left_up.join(df_right_up)
result2 = df_left_down.join(df_right_down)
result3 = result1.append(result2)
result4 = pd.merge(df_left_up,df_right_up,left_index=True,right_index=True)
result5 = pd.merge(df_left_down,df_right_down,left_index=True,right_index=True)
result6 = result4.append(result5)
unit_result = result.stack().head(10)
- 删除多余的列
del test_data['a']
test_data.head(3)
- 隐藏列元素
test_data.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(3)
- 筛选
df1 = df.loc[df.Age<10]
midage = df.loc[(df.Age>10) & (df.Age<50)]
midage = midage.reset_index(drop=True)
df2 = midage.loc[[100],['Pclass','Sex']]
df3 = midage.loc[[100,105,108],['Pclass','Name','Sex']]
df4 = midage.iloc[[100,105,108],[2,3,4]]