pandas
介绍
pandas和numpy一样,都是对数据进行处理的模块,但是pandas封装了更多的函数,而且pandas是在numpy之上的一个工具,在pandas中间有很多的方法其实底层是基于numpy的
read_csv
在pandas中间,可以使用read_csv方法直接讲一个csv文件进行读取,这里可以看到,对于使用pandas读取之后的数据类型是DataFrame,其实这也就是pandas的一个核心的数据存储方式(在后面的学习中,我们可以将DataFrame当作是一个矩阵的结构)
这里需要注意,在pandas中间对于字符的存储和其他的数据存储的名称不一样(一般叫str),这里叫做object
head
这里使用head,可以看到,直接将刚刚我们csv中间的内容显示出来了,而且格式都是相同的,这里使用head的时候默认情况下是显示前5行的数据;如果想要显示前三行的内容,可以在括号中间加上需要显示的行数的数字
tail
前面使用head能够显示前几行的数据,如果想要显示末几行就可以使用tail这个方法了
可以看到,这样同样显示的是5行的数据,如果想要显示指定行数的数据,在括号中间写上对应的数字即可
columns与tolist()
对于一个csv文件,第一行的内容会表示以下的内容的一个属性,或者说是指标,这里我们可以通过columns将这个指标获取出来
上面的结果可以看到是一个类似list的,但却并不是一个list;如果想要将结果转为list,可以直接在后面加上一个tolist()进行转化
shape
在前面的numpy中间,使用到了shape,在pandas中间也是同样存在的
如上,将food_info进行一个shape操作,得到的结果的含义就是存在8618样本,每一个样本存在36个指标(属性)
loc
在pandas中间想要获取数据并不能直接进行获取,这里需要调用到loc这个方法,如上,如果想要获取到第一行中间的数据,可以使用food_info[0]即可
这里使用loc同样也是能够对数据进行切分的,如果想要取出第4行到第6行的数据,可以采用如下的方式
如果想要获取这个数据中间指定的几行的数据,则可以使用下面这个方法
可以看到,就能够单独的获取到第3、6、11行中间的内容
除了使用上面的loc来获取某一行或者多行的数据外,如果想要获取某一列的数据,可以直接使用这列对应的指标进行获取即可
如上,直接在后面的中括行中间写上列名(指标)即可
使用上面的方式能够将数据中间的某一列的数据进行获取,如果想要获取多列数据呢?这时候可以使用如下的方式进行
将需要获取的列的列名(指标)放入到一个list中间,之后传到DataFrame中间,这样就能够获取到对应列里面的数据了
endswith
使用endswith匹配以某一个字符串结尾的内容
在上面的实例中,可以看到,首先将food_info中间的指标使用tolist的方法写入到一个list中间,之后遍历这个list并使用endswith获取以’(g)'结尾的字符串
对一列数据进行计算
在上面的事例中,能够看到,想要实现的是将Calcium_(mg)这列中间的数据都处以1000(将mg转为g),仅仅只需要获取这一列的数据,直接除即可
上面将一列数据同时除了1000,如果想将两列数据直接进行相乘的话,使用如下的方式
在上面将’Water_(g)'和’Lipid_Tot_(g)'这两列的数据直接进行相乘的操作时候,其实就是这两列中间的每一行的数据进行相乘的操作
合并列
上面我们实现了对一个列进行除法的操作,即将mg转为g,此时如果想将转换完成的g这一列的数据进行合并,就可以使用如下的方式
如上,将新生成的一列就加入到已有的DataFrame中间了
max
使用max方法,能够获取到某一列中间最大的值
sort_values
使用上面的sort_values对Energ_Kcal这一列进行排序,默认情况是进行从小到大排序,这里的inplace=True,表示的就是将原文件同时进行了处理;如果想要按照从大到小的顺序进行排序,则可以在括号中间加上 ascending=False
如上,这样的情况下,数据就是从大到小的顺序进行排序了;如果在排序中间会看到NaN的值,表示的就是缺失值
isnull
上面说到了NaN,这个表示的是缺失值;向这样的数据是存在有问题的,并不能用于数据分析,这样的情况下我们需要将这些内容剔除在外
在上面的内容中间,可以看到,在第五个数据显示的是True,表示的就是这个数据是缺失值
如果想要将中间的缺失值进行一个打印,可以直接将前面pd.isnull(age)作为一个索引,为True的就会将其对应的内容进行打印,否则不打印,如果想要通过缺失值的个数是多少,可以直接使用len
可以看到,在Age这一列中间,存在有缺失值的有177个
因为这里存在很多的缺失值,这些缺失值也是需要进行处理的,不能够直接用来进行处理,可以使用如下的方式进行清理
如上,获取到的good_age就是Age这一列中正常的年龄值
sum
使用sum进行求和的计算,例如,想要计算Age这一列中间所有年龄的和,就可以使用:sum(titianic_survival[‘Age’])
既然这里已经获取到所有人的值,此时就能够计算出一个平均值了
如上,这里获取到的就是一个平均年龄
mean
在上面计算平均值的时候,首先将缺失值进行了排除。之后进行了一个除法的操作,其实这样的操作直接使用mean方法就能够实现
基于上面的mean,来实现一个不同船舱对应的平均价格
通过上面的方式,可以看到不同船舱的票的价格
pivot_table
可以看到,为了实现上面计算不通船舱的价格的时候,写入的代码量较大;其实存在更为简单的方式进行处理
在上面的方式中,index指定船舱的列名,values指定了生存率,表示的意思就是将Pclass和Survived进行联合处理,处理的方法使用aggfunc进行指定,用到的是numpy.mean(如果不指定aggfunc的时候,默认就是求均值)
对于上面使用pivot_table的方式,我们仅仅只用了两个对象进行了处理,当然也是能够进行多项处理的
如上,values中间加入的是一个list,并且最后的aggfunc为numpy.sum
dropna
前面使用isnull的方式将某一列中存在缺失值的内容进行了打印,其实可以使用更为简单的方式进行处理(dropna)
如上,使用subnet去指定需要进行处理的列,axis=0表示行,可以看到新的DataFrame中行已经变成了714了
查找DataFrame中间具体某一个数
如上,我们仅仅需要知道行号,列可以直接使用列名即可
reset_index
前面讲到了sort_values对数据进行排序,但是排序完成之后,会发现index(索引)的那一列的数据还是按照原来的索引号进行展示的,如果想要index的内容也重新更新下,就需要使用到这里的reset_index的方法
如上,可以看到,我们将Age这一列中间的数据从大到小进行排序,发现最左边的index值仍旧还是按照原来的序号进行展示的
在上图中,使用reset_index的方法,可以看到,每一行坐前面的index值也进行了重新排序
apply 自定义函数
在上面的例子可以看到,定义了一个hundredth_now的函数,后面需要使用到这个函数的时候,直接使用apply即可,使用这样的方式可以自动将apply前面的数据传给括号中指定的这个函数中间
同样使用上面的方式,也能够获取到一张表中间出现数据缺失的数量
series结构
其实对于一个DataFrame,可以看作是由不同的行和不同的列组成的;其实这些行和这些列就是series
通过上面可以看出,在DataFrame中间取出一列的数据,获取该数据的数据类型,可以看到是series的类型;如果此时想要获取这一列中间的数据,可以使用values
如上,对这一列数据进行values操作,能够获取到这一列中的所有的值
前面说到,在DataFrame中是采用的series进行数据存储的,同样这里可以得出在series中间采用的是ndarray的方式进行数据存储的