数据分析工具pandas

数据分析工具pandas
一、什么是Pandas
1.Pandas是一个强大的分析结构化数据的工具集
2.基础是Numpy,提供了高性能的矩阵运算
3.应用,数据挖掘,数据分析。如学生成绩分析、股票数据分析等
4.提供数据清洗等功能
二、pamdas的数据结构
[第一种数据结构]1.Series
类似于一维数组的对象
通过list构建Series
ser_obj=pd.Series(range(10))
2.由数据和索引组成
索引在左,数据在右
索引是自动创建的
3.获取数据和索引
ser_obj.index,ser_obj.value
4.预览数据
ser_obj.head(n)
5.将数据强制升级到最新版本:python -m pip install --upgrade pip
6.索引号也是从0开始增长的
7.通过索引获取数据
ser_obj[idx]
8.索引与数据的对应关系扔保持在数组运算的结果中
9.通过dict构建Series
10.name属性:ser_obj.name , ser_obj.index.name
[第二种数据对象]11.DataFrame(二维数组)
(1)类似多维数组/表格数据(如:excel,R中的data.frame)
(2)每列数据可以是不同的类型,what about ndarray?
(3) 索引包括列索引和行索引
12.(1)通过ndarray创建DataFrame
(2)通过dict创建DataFrame
[第一种数据结构] (3)通过列索引获取列数据(Series类型)
df_obj[col_idx]或者df_obj.col_idx
(4)增加列数据,类似dict添加key-value
df_obj[new_col_idx]=data
(5)删除列:del df_obj[col_idx]
13.索引对象Index
(1)Series和DataFrame中的索引都是Index对象
(2)不可变(immutable):保证了数据的安全性
(3)常见的Index种类:
Index
Int64Index
MultiIndex,"层级"索引
DatetimeIndex,时间戳索引
三、Pandas的数据操作
1.索引操作
2.Series索引
(1)行索引,ser_obj['lable'],ser_obj[pos]
(2)切片索引,ser_obj[2:4],ser_obj['label1':'label3']
注意,按照索引进行切片操作的时候,是包含终止索引的。
(3)不连续索引,ser_obj[['label1','label2','label3']]
ser_obj[[pos1,pos2,pos3]]
(4)布尔索引
3.DataFrame索引(包括行索引以及列索引)
列索引:df_obj['lable']
不连续的索引:df_obj[['label1','label2']],访问不连续的列,可以将列标签放在里面
4.pandas的索引操作可以归纳为3种
loc,标签索引
iloc,位置索引
ix,标签与位置索引混合:先按照标签索引尝试操作,然后再按照位置索引尝试操作
注意:DataFrame索引可以将其看作ndarrat操作
标签的切片索引是包含末尾位置的
5.运算与对齐
(1)按照索引对齐运算,没有对齐按照位置补NaN
Series按照行索引对齐
DataFrame按行、列索引对齐
(2)填充未对齐的数据进行运算
使用add,sub,div,mul
同事通过fill_value
(3)填充NaN
fillna
6.函数应用
(1)可直接使用NumPy的ufunc函数,如abs函数等
(2) 通过apply将函数应用到行或者列上面。注意指定轴的方向,默认axis=0
(3)通过applymap将函数应用到每个数据上
7.排序:sort_index,索引排序
对DataFrame操作时注意轴方向
数值排序
sort_value=(by='lable')
8.缺失数据:
(1)判断是否存 在缺失值
ser_obj.isnull(),df_obj.isnull()
(2)dropna
丢弃缺失数据
(3)填充缺失数据

四、Pandas统计计算和描述
1.常用的统计计算
(1)sum,mean,max,min......
(2)axis=0按列统计,axis=1按照行进行统计
(3)skip排除缺失值,默认为True
(4)idmax,idmin,cumsum(idmax输出着一列里面,最大的索引号是多少;cumsum累计求和)
2.统计描述
(1)describe产生多个统计数据
(2)count 非NA值得数量
(3)describe 针对Series或者DtaFrame列计算汇总统计
(4)min,max 计算最小值和最大值
(5)argmin,argmax 计算能够获得到的最大值和最小值的索引的位置(整数)
(6)idxmin,idxmax计算能够获得的最小值和最大值得索引值
(7)quantile 计算样本的分位数
(8)sum 值得总和
(9)mean 值的平均数
(10)media 值的算术中位数
(11)mad 根据平均值计算平均绝对离差
(12)var 样本值的方差
(13)std 样本值的标准差
(14)skew 样本值的偏度(三阶矩)
(15)kurt 样本值的峰度(四阶矩)
(16)cumsum 样本值的累积和
(17)cummin,cummax 样本值的累计最大值和最小值
(18)comprod 样本值的累计积
(19)diff 计算一阶差分
(20)put_change 计算百分数变化
3.层级索引(hierachical indexing)
(1)MutiIndex对象
(2)选取子集
外层选取ser_obj['outer_lcabel']
内层选取ser_obj[:,'inner_label']
(3)常用于分组操作,透视表的生成等
(4)交换分层顺序,透视表的生成等
swaplevel()
(5)排序分层
sortlevel()

4.分组操作(groupby)
(1)对数据集进行分组,然后对每组进行统计分析
(2)SQL能对数据进行过滤、分组聚合
(3)pandas能利用groupby进行更加复杂的分组运算
(4)分组运算的过程
split->apply->combine
拆分:进行分组的根据,按照什么标准进行分组
应用:每个分组运行的计算规则,在每个分组上运用计算规则
合并:把每个分组的计算结果合并起来
(5)按照列明进行分组
obj.groupby('label')
(6)按列名多层分组
obj.groupby(['labe','label2'])--->多层dataframe
(7)按照自定义的key来分组
obj.groupby(selt_def_key)
自定义的key可为列表或者多层列表
(8)unstack可以将多层索引的结果转换为单层的dataframe
(9)GroupBy对象支持迭代操作
每次迭代返回一个元祖(group_name,group_data)
可用于分组数据的具体运算
(10)GroupBy对象可以转换成列表或者字典
(11)pandas也支持按列进行分组
(12)其他分组方法
通过字典进行分组
通过函数进行分组,函数传入的参数为行索引或者列索引
通过索引级别进行分组
(13)聚合
数组产生标量的过程,如mean(),count()等
常用于对分组后的数据进行计算
内置的聚合函数
sum(),mean(),max(),count(),size(),describe()
可自定义函数,传入agg方法中
grouped.agg(func)
func的参数为groupby索引的对应记录
应用多个聚合函数
同时应用多个函数进行聚合操作,使用函数列表
对不同的列分别作用不同的聚合函数,使用dict

(14)分组运算
原因:聚合运算改变了原始数据的shape
如何保持原始数据的shape?
使用merge的外连接,比较复杂
transform
transform的计算结果和原始数据的shape保持一致
如:grouped.transform(mp.mean)
也可传入自定义函数

(15)grouped.apply(func)
func函数在各个分组上进行调用,然后结果通过pd.concat组装到一起
产生层级索引
外层索引是分组名
内层索引是df_obj的行索引
禁止层级索引,groups_keys=False
apply可以用来处理不同分组内的缺失数据填充
如:填充该分组的均值
五、数据清洗、合并、转化和重构

1.数据清洗时数据分析的关键一步,直接影响之后的处理工作
2.数据需要修改吗?由什么需要修改的吗?数据应该怎么调整才能适用于接下来的分析和挖掘?
3.是一个迭代的过程,实际项目中可能需要不知一次的执行这些清洗操作
4.处理缺失数据
pd.fillna(),pd,dropna()
5.pd.merge
根据单个或者多个键将不同的DataFrame的行连接起来
类比数据路的连接操作
默认将重叠的列明作为"外键"进行连接
on显示指定外键
left_on,左侧数据的"外键"
right_on,右侧数的"外键"
默认是"内连接(inner)",即结果中的键是交集

五二).数据合并
1.pd.concat
(1)沿轴的方向将多个对象合并在一起
(2)Numpy的concat:np.concatenate
(3)pd.concat
注意指定轴的方向,默认axis=0
join指定合并的方式,默认为outer
Series合并时查看索引
DataFrame合并的时候查看行索引和列索引
五三).重构
stack
将列索引旋转为行索引,完成层级索引
DataFrame-->Series
unstack
将层级索引展开
Series-->DataFrame
默认操作内层索引,即level=-1
处理重复数据
duplicated()返回布尔型的Series表示每行是否为重复行
drop_duplicates()过滤重复行
默认判断全部列
可指定按某些列的判断
map
Series根据map传入的函数将每行或者每列进行转换
数据替换
replace

posted @ 2018-10-11 14:20  stone1234567890  阅读(552)  评论(0编辑  收藏  举报