python之pandas库
1. 前言
numpy在处理带标签的数据上有些力不从心。
2. 对象创建
2.1 带标签的一维数组series
- 语法
pd.Series(data, index=index, dtype=dtype)
data: 数据,可以是列表,字典或者Numpy数组
index: 索引(标签),可选参数
dtype: 数据类型,可选参数
2.1.1 用列表创建
- index缺省,默认为整数序列
- 增加index标签
- 增加数据类型
如果缺省,根据传入的数据自动挡那个判断
数据支持多种类型,如
数据类型可以被强制改变
若元素不能被强制转化成对应的数据类型,将会报错。
2.1.2 用一维numpy数组创建
2.1.3 用字典创建
- 默认字典中的key为对象的index, value为对象中的data
- 字典创建,如果指定index, 则会到字典中筛选,找不到的,设置值为Nan
2.1.4 data为标量的情况
此时,值会自动赋值,填满所有标签。
2.2 带标签的多维数组DataFrame
- 语法
pd.DataFrame(data, index=index, columns=columns)
data: 数据,可以是列表,字典,或者numpy数组
index: 索引,可选参数
columns: 列标签,可选参数
2.2.1 通过Series对象创建
列标签缺省,默认从0开始的整数
2.2.2 通过Series对象字典创建
数据不够时,会自动对齐
2.2.3 通过字典列表对象创建
-
将列表中的每一个字典作为行值
-
字典索引作为index,字典键作为columns
-
不存在的键,会默认值为Nan
2.2.4 通过Numpy二维数组创建
3. DataFram性质
3.1 属性
3.1.1 df.values返回numpy数组表示的数据
即去除了标签
3.1.2 df.index返回行索引
3.1.3 df.columns返回列索引
3.1.4 df.shape 返回形状,维度
返回(m, n)表示m行n列
3.1.5 df.size 返回数据大小
3.1.6 pf.dtype返回每列数据的数据类型
3.2 索引
3.2.1 获取列
-
字典方式
-
对象属性方式
3.2.2 获取行
-
绝对索引 df.loc
-
相对索引 df.iloc
3.2.3 获取标量
-
绝对索引
-
相对索引
3.2.4 Series对象的索引
取dataframe一行数据为Series对象,验证:
3.3 切片
3.3.1 行切片
第三行取不到
3.3.2 列切片
3.3.3 多种多样的取值
-
行列同时切片
-
行切片,列分散取值
-
行分散取值,列切片
-
行列均分散取值
loc是不能成功的。
3.4 布尔索引
3.4.1 比较运算
3.4.2 掩码
3.4.3 isin()方法
3.5 赋值
3.5.1 增加新列
- 增加新列
- 修改赋值
3.5.2 修改Index和columns
4. 数值运算及统计分析
4.1 数据查看
4.1.1 查看前面的行
4.1.2 查看后面的行
4.1.3 查看总体信息
4.2 调用函数
4.2.1 向量化运算
4.2.2 矩阵化运算
- 转置
- dot矩阵相乘
numpy和Pandas运算对比
纯粹的计算在Numpy中执行更快,Numpy更侧重于计算,Pandas侧重于数据处理。
Pandas基于Numpy,除了Pandas中额外的开销外,计算速度是差不多的。
python中原生的for循环速度明显慢很多。
4.2.3 广播运算
-
按行广播
-
按列广播
4.2.4 Pandas相对Numpy的新方法
- 索引对齐
4.3 统计相关
4.3.1 种类
4.3.2 排序
- 通过某个列标签进行排序
- 按轴进行排序(按行列标签进行排序)
4.3.3 非空,求和,最大最小值
- 非空
- 求和
sum默认是以列为单位,将该列对应的所有行值相加
- 最大最小值
4.3.4 均值,方差,标准差
- 均值
- 方差
-
标准差
-
中位数
-
众数
-
75%分位数
-
一网打尽方法
数值类型:
字符类型:
4.3.5 相关系数,协方差
- 相关性系数
- 看与某一列的相关系数
4.3.6 汇总输出 decribe()
4.3.7 apply()自定义输出
- cumsum: 累加函数
5 处理缺失值
5.1 发现缺失值
在数据中最好不要None,None更加消耗资源,使用NaN,np.NaN是一种特殊的浮点数。
5.2 删除缺失值
5.2.1 删除整行
5.2.2 删除整列
5.2.3 删除全是缺失值的行或者列
5.2.4 删除只有存在缺失值的行或者列
将5.2.3中的All改为any即可。
5.3 填充缺失值 fillna
5.3.1 按照指定值进行填充
5.3.2 按照均值进行填充
6. 合并数据
6.1 concat
-
垂直合并
-
水平合并
- 当索引产生重复时,需要对索引进行重新排列,加上ignore_index=True即可
6.2 merge对齐合并
两个对象元素存在相同时候,需要进行merge合并
7. 分组和数据透视表
7.1 分组groupby
7.1.1 延迟计算
执行groupby()时,会返回一个对象,并没有开始计算,等待调用函数时,采用进行计算。
7.1.2 按列取值,调用方法
-
按列取值
-
按组迭代
-
调用方法
-
支持更复杂的操作
-
过滤
-
转换
7.1.3 apply方法
7.1.4 设置分组值
- 用字典将索引映射到分组
- 任意的python函数进行分组
- 多个有效值组成的列表
7.2 数据透射表
privot_table
8. 其它
8.1 向量化字符串操作
8.2 时间序列化处理
8.3 多级索引
8.4 高性能的eval和query
- 减少了复合代数式计算中间过程的内存分配
- 内存一定,数据越大越有优势