如何使用机器学习数据分析库pandas完成文件数据预处理操作
titanic_train.cvs中的数据为
其中passengerld为每一个人的id
Survived为标签值只有0和1
pclass为船舱的等级
SibSp为当前人兄弟姐妹的数量
Parch为老人和孩子的数量
Tickle为船票的编码
Fare为船票的价格是多少
Cabin为船舱的编号
Embarked为当前人在什么地点登船的
下面程序为挑选出Age列中缺失的数据(为空的数据):
titanic_train["Age"]为获取列名为Age的所有数据
age_is_null=pandas.isnull(age)判断这些数据中哪个为空,为空为ture,非空为fasle
age_null_true=titanic_train[age_is_null]将这些age对应的true或false作为索引进行传递,得到所有为空的
print(age_null_true["Age"])输出所有为空的age
print(len(age_null_true))输出为空的个数
在实际操作中需要把为空的给剔除掉,原因是:
可以看出这个程序因为没有将为空的给剔除掉,导致了结果为nan
这个程序就是去除所有age为空的那些人,去除他们之后求和sum,然后求出不为空的数量,进而求出平均值
程序详解:
pandas.isnull(age)的意思判断age列中是否为空,为空就是true,不为空就是false
titanic_train[age_is_null==False]["Age"]的意思是获取age不是空的age列
sum=sum(age_null_false)
len=len(age_null_false)
求和,求长度
上面的操作有一个方法已经封装好了:
问题:求出做在1,2,3等舱的船票的平均值?
遍历1到3,然后分别获取所有pclass=1,2,3的人的船票的价格,然后使用mean方法求出平均值
titantic_train["Pclass"]为获取Pclass列
以遍历到1来举例:titantic_train["Pclass"]==1为Pclass=1的为true,Pclass不等于0的为false,以这个为索引选出所有Pclass为1的行
plass_fare=plass_row["Fare"]为获取Pclass=1的Fare
plass_fare.mean()为求出Fare的平均值
使用这种方式虽然求出来了以pclass分组的平均值,但是太过于麻烦,可以使用下面的方式来求
这样一句代码就完成了,解释:
这个代码的意思是以Pclass为分组,求各组中Fare的平均值(np.mean),这样就求出了所有以Pclass为分组的Fare的平均值
aggfunc=np.mean不写这句代码也可以,因为默认就是求平均值,不写就是求每组的平均值
还可以一下子统计多列,以列表的形式
该程序可以看出来,一下子统计了Fare,Age两列的总值
有些数据是缺失的,可以把它给剔除掉,上面的mean会自动剔除掉缺失的,但是现在我们想要剔除掉缺失的,获取剩下的数据可以使用dropna方法来完成
从该程序可知,5的age为空被剔除掉了还有其它的为空的被去掉了,我们获取到了所有age不为空的数据
程序详解:
tutanic_train.dropna(axis=0,subset["Age"])这个代码的意思是从列的角度(axis=0)看Age列只要有空就去除那一行
tutanic_train.dropna(axis=0,subset["Age"])【“Age”】的意思是指获取已去除空值的数据Age列
注意:subset接收的值只能是列表
subset=["Age","Cabin"]表示只要age列和cabin列中有一列为空,那么那行就会被去除
axis=1就表示从行的角度来看,所以就不用使用subset来指定列了,从行的角度只要行的数据为空那么整个列都要去掉,所以如下图所示,age列和Cabin肯定会去掉,因为只要由一个空,那么整列就会被去掉
一个表格中的数据,可以通过行和列(列名)定位唯一的数据,上面程序是【83,”age“】就表示行是第84行,列为age列,所以唯一定位到了28.
这个列不用多说肯定是列名,行是从除列名的下一行开始算,那是第一行,索引为0
83就表示索引为83,所以就应该是84行,加上首行列名那么就是85行
这个程序是按age进行排序,按降序排列
但是排序之后的结果是我们原来的索引,而不是从0开始从新排序,这样不利于看,如何使索引从新编写?
使用reset_index(drop=True)表示重置索引,以前的索引删掉
可以看出索引从0开始排好序了
pandas自定义函数
pandas提供了很多函数,但是可能有的函数pandas并没有封装,实现一个功能需要多个函数,那么就可以把这些函数封成一个自定义函数
可以看出hundrend_row(c)就是封装的函数,功能显示第100行数据,该方法有一个参数c,可以任意名称,他表示整个数据。类似titanic_train,但是它和titanic_train还有一些不同,它是一列一列的数据
该函数是计算数据中每列为空的数量,因为c是一列一列的数据,所以可以计算出每列的数量