python进阶9-pandas的应用(Python基础之pandas库三)
python进阶9-pandas的应用(Python基础之pandas库三)df.sort_index(axis=0 ascending=True inplace=Ture)sort_index:对索引进行排序,包括横索引和竖索引,一般形式如下:DataFrame对象的数据结构是二维的,而二维数据常用到的操作是转置2.排序与排名Python3以上版本用的sort_index和sort_values方法对DataFrame对象数据进行排序
本系列内容所用Python版本为anaconda,直接浏览器搜索下载安装即可!
今天继续学习DataFrame对象的有关知识。
一、DataFrame对象的操作
1.转置
DataFrame对象的数据结构是二维的,而二维数据常用到的操作是转置
2.排序与排名
Python3以上版本用的sort_index和sort_values方法对DataFrame对象数据进行排序
sort_index:对索引进行排序,包括横索引和竖索引,一般形式如下:
df.sort_index(axis=0 ascending=True inplace=Ture)
该表达式仅列出了常用的参数,其中axis表示轴向,取0时表示横轴,即对行索引进行排序,取1时表示纵轴,ascending表示排序方式,True为升序,False表示降序,inplace表示是否复制备份进行排序操作,True表示不复制,在原df对象上操作,False表示复制备份进行操作,取False时需重新定义变量接收该排序操作的返回对象
对行索引排序
排序前:fia,排序后:afi
对列索引排序
排序前:Agd,排序后:Adg
降序排序
复制拷贝待排序对象
sort_values:值进行排序,一般形式如下:
df.sort_values(by= axis=0 ascendinf=True inplace=True)
该表达式的参数与sort_index的参数基本一致,不过多了个by参数,这个参数是指按哪个变变量的值排序(这里可以是列变量、也可以是横变量)
分别对行数据和列数据排序,需要注意的是当参数by取行变量时,axis参数要取1,当参数by取列变量时,axis参数要取0
对多列进行联合排序
联合排序的意思是当目标待排序变量有相同值时,按照第二变量进行排序,以确定待排序变量相同值的顺序,上述代码中,希望对A列的值升序排序,发现有两个2,于是对b中c、a对应的值进行降序排序,最终确定A列值的排序
sort_values中还有一个参数na_position,其表示缺失值的位置,取first时排在顺序前面,取last时排在顺序后面
对变量a的值降序排序,将缺失值排在顺序前面
值排名:rank函数
其中排名方式的参数取值有:first、min、max、average,举个例子,如果有一行数4 5 5 7 8 8,9,按照first参数排名则为1234567,按照min参数排名则为1224557,按照max参数排名则为1334667,按照average参数排名则为1、2.5、2.5、4、5.5、5.5、7
3.增加行或是列
对DataFrame对象添加一列
添加列时按照index对齐,没有的数字用nan填充
横向合并操作:concat方法
纵向合并操作:append方法
4.删除操作
删除行,drop()方法 参数为index包含的datetime时间对象
可以看出是复制操作,原DataFrme并没有改变
drop参数时index包含的datetime时间对象就行
删除列,drop()方法,参数为列索引变量,axis参数为1
在原DataFrame对象上直接操作,del方法
5.替换操作
有时我们需要对数据集中的数据进行替换,可以先找到需要替换的索引然后进行重新赋值
标签索引替换
位置索引替换
重置索引,如果对DataFrame对象调用reindex函数,将返回一个新的DataFrame对象,其index和columns是reindex的参数,如果新对象的索引或列名原对象中没有数据,则引入缺失值
一、DataFrame对象的运算
1.简单运算
在分析数据时,不可避免的要对两个数据集进行运算,而当两个数据集进行运算时,有两个不可避免的核心问题:一是数据之间如何匹配运算,二是如何处理不匹配的数据。我们知道pands中的两种数据结构Series和DataFrame的特点是index,其中后者还多了个columns,自然想两数据集运算时用index和columns匹配运算,用 、-、*、/来实现运算的话,Series和Series之间是index匹配运算,无法匹配的用nan填充,Series和DataFrame之间则是index和columns匹配运算,运算的方式是将DataFrame的每一行都与Serise进行运算,无法匹配的用nan填充,DataFrame和DataFrame运算时同时匹配index和columns运算,无法匹配的用nan填充
Series和Series之间的运算
匹配不到的index用nan填充
Series和DataFrame之间的运算
DataFrame的每一行都与Series匹配运算
DataFrame和DataFrame之间的运算
2.函数应用与映射
DataFrame是数据集,有时我们需要对数据的单独行或是列进行函数操作,肯定可以逐行或逐列分析,但未免太过繁琐,pandas包里有很简便的函数apply可以实现,及基本形式如下:
DataFrame.apply(func axis=0),其中func是对列或行应用的函数,axis表示对行还是列操作
pd.date_range方法可以生成datetime序列
也可以自定义函数
用lamda创建匿名函数
三、数据规整化
1.缺失值的处理
缺失值的判断
前面的数据运算中,由于匹配运算匹配机制,运算结果中可能会出现缺失值,为了后续计算我们就需要对缺失值进行处理,首先第一步就要判断缺失值
df6中存在缺失值
用isnull和notnull方法都可以判断缺失值,其中谴责缺失值返回True,后者返回False
选出不是缺失值的数据
选出了a列中的数据
缺失值的填充
有时候我们想用实际的值代替缺失值,这就需要用到pandas的填充函数
函数表达式为:DataFrame.fillna(value=none method=none axis=none inplace=False limit=none),其中value是缺失值位置填充值,可以是数值也可以是字符串,method是填充方式默认为none,也可以是ffill和pad或是bfill和backfill,其中ffill和pad是用行或列上一个观测值填充,bfill和backfill是用行或列下一个观测值填充,axis和method参数配合使用,limit意为最多连续填充几个数值,inplace则表示是否拷贝原对象进行操作,False拷贝,True不拷贝
全部用0填充
用上一行,上一列填充
用下一行、下一列填充
缺失值的选择删除
pandas提供了删除缺失值行或列的函数dropna 其一般表示形式如下:
DataFrame.drop(axis=0 how='all' thresh=none)
其中axis为0表示对有缺失值的行操作,为1表示对有缺失值的列操作,how为any指只要有缺失值就删除该行或列,为all则指全部为缺失值才删除,thresh则指明当趋势值个数超过参数时才删除
删除重复数据
DataFrame对象调用duplicated可以得到一个bool型的Series,表示个行是否是重复行
显然没有重复行
第二行跟第一行重复
移除重复行
上面的操作是基于所有列的,我们也可以对单独列判断是否重复
比较忙没有校对,有错误的地方还请担待,下次内容我们继续学习。
END