pandas初级篇
1 pandas数据
panadas加载完成之后的数据类型为DataFrame,如果对DataFrame进行查询后,其结果转变为Serise类型
如果要求了解不深的话可以简单的把DataFrame理解成为一个表格
Serise理解成为只有一列的表格
当我们利用pandas从数据库,csv文件等读出来的数据都是DataFrame类型,如果对DataFrame进行查询,只要查询结果多余1列,那么查询出来的类型就是DataFrame类型,如果是单列,则类型为Serise类型
2 DataFrame属性和方法
import pandas as pd
data = pd.read_csv('./datas/train.csv')
这种数据结构就是二维表结构,当然这里的二维说的是表,很多时候我们把表里面的字段也称为维,这个维是在数据分析里面说的,很多时候数据里面每一个字段就是一个属性,或者说一个特征,有时候也会看到某个对象存在N个维,这里的维通通说的是字段
要区分其实很容易,只需要记住在空间上说的维其实是只坐标轴,二维空间就x,y轴,表示平面,三维空间xyz轴,三个轴,表示立体,4维空间甚至更高的维,在我们现实生活中难以用图像来表示,只有通过数学方式进行表示,所以高纬空间通常都是偏向数学方向的表示
属性
values index columns dtypes size ndim shape T
data.values
表示直接将数据转变成为numpy的ndarray类型数据,只要经过这一步操作之后,返回的数据就可以直接使用numpy的方法进行各种变化
data.index
不要看到index就以为是把所有的列名列出来,实际上DataFrame存在两个索引,行索引和列索引,可以想象成为就是二维数据表的行列索引,这里的index打出来的是行,而且显示的不是所有数据,现实的是一个统计结果,当然这是你没有自定义行索引的情况
比如数据库里面的数据,行就表示每一条记录,实际上我们这里的行显示的就像
RangeIndex(start=0, stop=891, step=1)
这种结果,很好读,从0开始到891结束,步长为1
data.columns
数据库里面col经常简写为列,很显然这个查出来的就是列索引,对应到数据库里面就是字段名
data.dtypes
表示查询出所有列对应的数据类型,这里一目了然,非常方便
data.size
这个查出来的结果为存在多少个元素,因为是二维表格,行乘以列就是元素总的个数
data.shape
很熟悉,这个就是指的形状
data.ndim
这个是查询维度,因为我们经常在数据或者excel,或者csv格式读取出来的数据,这些通常都是二维表格,所以查询出来是2,但是不排除后面对data进行处理过后,进行更高维度的拼接或者添加高维度索引,想象一下,既然列表里面可以再放列表,那么data中元素就只能是数值或者字符串么?
data.T
很像numpy中的ndarray.T一样,对二维表进行转置,将列变成行,行变成列
data.字段名
这个有点像ORM模型的方式,很多时候字段名实际上就是列名,也是列索引,如果不进行单独配置的话是这样,那么直接.字段名就可以查出这一列的信息,查询出来的结果是一列,既然是单独一列,那么它就是Series类型数据
3 增删改查
增
这个好理解,直接就像使用字典一样进行添加数据,但是需要注意的是这不是指定的添加某一个数据,当你选定了字段名之后是对这个一列进行添加
data['new_data'] = data['Age']**2
新数列的组成可以直接用原来某一列的变化得到,也可以直接赋值,直接赋值之后这一列都是一个定值
删除
在数据库中删除的关键字是drop
DataFrame.drop(labels='删除的行或列', axis=[0或1,默认0,0表示行,1表示列],inplace=[True或False,默认False,表示是否对原数据生效])
比如
data.drop(labes='new_data', axis=1, inplace=True)
把刚才新建的一列删了,并且对原数据起效
copy_data = data.drop(labels=range(100,1,-1), axis=0, inplace=False)
这里可以直接传range这种迭代器,从100号删到1号,当然也可以range(1,100)从1号删到100号,注意到axis=0,实际上删除的是行
查询
查询实际上使用频率最高,上面类似字典那种查询这里就不再示范了
data[['Age','new_data']]
这种直接列出几个列,需要注意的是,如果是多个列查询出来同样也是DataFrame类型,查出来具体的某一个列,其数据类型才会变成Series类型
不管是DataFrame类型还是Series类型,都支持切片操作
data[['Age','new_data']][-1::-1]
相当于倒序排列,这种方式很像查询结果是一个list,然后直接切片操作
如果直接对数据进行花式切片也可以
data[:][:10]
对data数据切片,因为列的索引都是列名不是数字,所以列索引只能[:]来切,其实相当于没有切,后面的[:10]从0开始取到9,总共10行数据
相当于
data[:10]
效果一样的
当然在实际过程中,想查看前10行和后10行数据经常使用的是
data.head(10)
data.tail(10)
data['Age'].head(10) # Series类型同样适用
非常重要的也是经常使用的 loc iloc ix
其中loc和iloc的方式接近
DataFrame.loc[行索引条件, 列名称]
DataFrame.iloc(行索引,列索引)
在一个二维表格中,相当于一个二维空间,如果我们知道了x坐标和y坐标就能够在二维空间中进行精准定位
data.loc[(data.Age.isnull()), 'Sex']
首先data.Age已经查出了Age列的数据,之后isnull()的意思是对这一列数据中的每一行进行审查,如果存在值就是False,如果是空值就True,那么经过data.Age.isnull()之后这个行索引条件就变成了一个行布尔索引,之后再对’Sex’性别这一列进行查询,凡是行条件为True的才被索引出来,这是对某列数据中的缺失数据进行其他列数据显示的方式
loc的条件索引方式
data.loc[(data['Age'] > 18) & (data['Sex'] == 'male')]
使用逻辑& 表示and的意思,上面语句时查出年龄大于18, 并且性别为男的所有数据,这是一种筛选的方式
后面的列索引也可以进行多个列同列的方式
data.loc[(data.Age.isnull()), ['Sex', 'Name']]
显示出性别和名字字段,筛选条件为年龄为空
iloc直接跟的是索引
data.iloc[:,[1,2,3,4]]
查询所有行,显示第1,2,3,4列
iloc同样可以进行条件筛选方式查询,但是iloc不能接受条件的表达式,因为表达式通常是对某一列进行的,那么一旦查询的返回值是具体的列,就表示数据类型已经切换成了Series类型,iloc不能接受Serires类型,所以需要进行处理
data.iloc[(data['Age'] > 18).values, [1]]
年龄大于18岁的第一列信息,注意到有一个.values,这种直接属性将整个行索引条件变换成了ndarray类型
ix的使用
DataFrame.ix[行索引的条件,可以是名称和位置 ,列索引的位置或名称]
这种方法实质上执行的效率比loc和iloc要低,可读性不高,通常能够用ix办到的都能用loc办到,所以把loc撸通关基本不用看其他的了
修改
这个没什么好说的,字典怎么改数据那么DataFrame就怎么改
data['Age'] = 0
把所有Age信息都改为0
当然也可以进行loc查询后更改,效果一样,建议使用loc查询后更改,这样可以设置条件,不然都是直接整列改意义不大
4 数据统计分析
强大的数据统计分析方式,numpy中的很多方法在这里都能找得到
两个最常用的查看数据信息的方法
data.info() # 查询每个列的数据类型以及非空的个数
data.describe() # 查询出数据没列的统计信息,均值,方差,标准差,最大值,最小值等信息
注意到data实际上是DataFrame类型,如果查询的结果是某一个具体的列,那么其类型是Series类型,Series类型是没有info()方法的
Series类型提供了value_counts()方法查询具体某一列的统计信息
data.Age.value_counts()
统计结果为该列中,所有数据的频次统计,比如如果100岁出现3次,结果中一定包含100 3
这种方法非常好用,针对离散型数据尤其如此,比如某个数据你拿到后,上万条数据,其中某个字段你发现其实离散值,但是具体存在几个值你也不清楚,也许存在40个或者更多,不可能直接去一个个看,直接使用这个方法,返回的是一个列表,第一列是这些对应的值,第二列是这些值在数据中出现的次数,最后还统计了存在多少个值
min | 最小值 | max | 最大值 |
---|---|---|---|
mean | 均值 | ptp | 极差 |
median | 中位数 | std | 标准差 |
var | 方差 | cov | 协方差 |
sem | 标准误差 | mode | 众数 |
skew | 样本偏度 | kurt | 样本峰度 |
quantile | 四分位数 | count | 非空数 |
describe | 描述统计 | mad | 平均绝对离差 |
都是些方法,解释一些
mad表示样本相对于均值的差值取绝对值并求和之后除以样本个数,
skew表示:样本三阶中心矩除以样本二阶中心矩的3/2次幂的商