pandas初级篇

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=[01,默认0,0表示行,1表示列],inplace=[TrueFalse,默认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次幂的商

猜你喜欢

转载自blog.csdn.net/weixin_43959953/article/details/86475487