机器学习必备之Pandas(二)

Pandas

函数应用和映射

numpy有一些ufuncs(即元素级数组方法),也可以用于操作pandas对象:
在这里插入图片描述
另一个常见的操作就是,将函数应用到由各行或各列所形成的一维数组上,DataFrame的apply方法即可实现这个功能:

   [In] f = lambda x: x.max() - x.min()
   [In] frame.apply(f)
   [Out] a    1.515260
		b    2.424369
		c    2.014877
		dtype: float64

但是许多最为常见的数组统计功能都被实现成了DataFrame方法,比如sum和mean,所以无需使用apply方法。

除此以外,传递给apply的函数还可以返回由多个值组成的Series:
在这里插入图片描述

排序和排名

根据条件对数据集进行排序也是一种重要的内置运算,要对行或列进行排序(按字典顺序),可用sort_index方法,他将返回一个已排序的新对象:
在这里插入图片描述
而对于DataFrame则可以根据任意一个轴上的索引进行排序(数据默认是根据升序排列的,但也可以按照降序排列,只需要在属性加上ascending=False即可):
在这里插入图片描述
如果想要按值对Series进行排序,可以用他的order方法:
在这里插入图片描述
在进行排序时,任何的缺失值默认都会被放到Series的末尾:
在这里插入图片描述
若要根据多个列进行排序,传入名称的列表即可:
在这里插入图片描述
排名(ranking)与排序的关系密切,且他会增设一个排名值(从1开始,一直到数组中有效数据的个数),他与Numpy.argsort产生的间接排序索引相差不多,只不过他可以根据某种规则破坏平级关系。默认状态下,rank是通过“为各组分配一个平均排名”的方式来破坏平级关系的,这个是什么意思呢?还真的不好理解,所以要解释一下:
在这里插入图片描述
对Series中的每一个元素进行排序,如果遇到相同的数值,就在相同的数值之间取一个平均数,假如有2个4应该排在第三位,那么就把他们两个的位数取一个平均值,取到了3.5的排名。
当然也可以通过数值在原数据中的顺序给出排名:
在这里插入图片描述
下表中列出了所有用于破坏平级关系的method选项:
在这里插入图片描述

带有重复值的轴索引

到目前为止,所有的范例都有唯一的轴标签,虽然很多函数都要求标签唯一,但这并不是强制性的:
在这里插入图片描述
对于带有重复值的索引,数据的选择方式会有所不同:如果某个索引对应多个值,则会返回一个Series;而对应单个值的,则会返回一个标量值。
在对DataFrame的行进行索引时也是如此:
在这里插入图片描述

汇总和计算描述统计

pandas对象拥有一组常用的数学和统计学方法,其实机器学习、数据挖掘本质上就是统计学科,其中大部分都属于约简和汇总统计,用于从Series中提取单个值(如sum或mean),或者从DataFrame的行或列中提取一个Series。跟对应的Numpy数组方法相比,他们都是基于美誉缺失数据的假设构建的。
调用DataFrame的sum方法将会返回一个含有小计的Series:
(默认的axis=0是按照列进行求和运算)
在这里插入图片描述
其中的np.NAN的值会被自动排除,除非整个行或列都是NaN,也可以通过skipna属性的值禁用该值:
在这里插入图片描述
下面列出一些简约方法的常用选项:
在这里插入图片描述
有些方法是返回的间接统计(比如达到最小值或最大值的索引):
在这里插入图片描述
这里关于统计汇总的相关方法一并给出,在应用的时候再具体学习:
在这里插入图片描述
在这里插入图片描述

相关系数与协方差

有些汇总的数据就是通过参数数据计算出来的。Series的corr方法用于计算两个Series中重叠的、非NaN的、按索引对齐的值的相关系数(相关关系是一种非确定性的关系,相关系数是研究变量之间线性相关程度的量)。
与此类似,cov用于计算协方差(在概率论和统计学中,协方差用于衡量两个变量的总体误差)。
利用DataFrame的corrwith方法,可以计算其行或列跟另外一个Series或DataFrame之间的相关系数,传入一个Series将会返回一个相关系数值Series(针对各列进行计算);

唯一值、值计数、成员资格方法

在这里插入图片描述

处理缺失数据

缺失数据在大部分的数据挖掘比赛中是非常常见的,比如泰坦尼克号的比赛中就给出了不少的部分缺失数据。而pandas的设计目标之一就是让缺失数据的处理尽量轻松点,之前我们看到的pandas对象上的描述统计都是排除了缺失数据的。
pandas使用浮点值NaN来表示浮点和非浮点数组中的缺失数据,但他也仅仅是一个便于被检测出来的标记而已(Python内置的None值也会被当作NaN处理):
pandas中的NaN表现形式不一定是最优的,但他确实挺可靠的
在这里插入图片描述
上面的是关于NaN的一些简单处理方法。

过滤掉缺失数据

使用人工手动过滤掉缺失数据是一种笨办法,但是确实挺有效的(前提是数据量不是太大),但是dropna可能更实用一些。
对于一个Series,dropna返回一个仅含非空数据和其索引值的Series:
在这里插入图片描述
而对于一个DataFrame来说就有点复杂了。我们希望dropna最好默认丢弃掉全NaN或者含有NaN的行或列,但是事实上,dropna丢弃掉任何含有NaN缺失值的行,(传入how='all’将只丢弃全为NaN的那些行)。
如果要用这种方式来丢弃列,只需传入axis=1就可以了。
另一个滤除DataFrame行的问题涉及时间序列数据;如果想要留下一部分的观测数据,可以用thresh参数实现这个目的,他可以留下想要有几个值的某些行或列:
在这里插入图片描述在这里插入图片描述
这里的thresh想要留下有3个值存在的行,所以属性中加入thresh=3就可以达到目的了。

填充缺失数据

当你不想滤除缺失数据的时候,害怕会丢弃跟他相关的其他的数据,而是希望通过其他的方式来填补缺失的数据。这个时候,fillna方法就是最主要的函数了,通过一个常数调用fillna就会将缺失值替换为那个常数:
在这里插入图片描述
在这里给出fillna函数的相关参数:
在这里插入图片描述在这里插入图片描述

层次化索引
就是将层次的归属关系讲清楚,比如画树状图
让人一看就明白

层次化索引是pandas一项非常重要的功能,他的作用是使你能在一个轴上拥有多个索引级别,简单说就是,他能使你以低维度形式处理高维度的数据,显然这样能提高运算的速度。
在这里插入图片描述
这就是带有MultiIndex索引的Series格式化输出形式,索引之间的间隔表示直接使用上面的标签:
在这里插入图片描述
对于层次化索引的对象,选取数据子集的操作很简单,甚至还可以在数组的“内层”中进行选取,这些操作都ok;
层次化索引在数据重塑和基于分组的操作(生成透视表)中扮演者非常重要的角色,比方说,这段数据可以通过其unstack方法被重新安排到一个DataFrame中:
在这里插入图片描述
就是可以将层次化索引数组转换成DataFrame的类似二维数组的形式;
unstack的逆运算是stack:
在这里插入图片描述
对于一个DataFrame来说,每条轴都可以有分层索引,这个操作就很秀了,不用多说大家也能想象到。
其中各层都可以有名字,可以是字符串也可以是别的Python对象。如果指定了名字,他就会在控制台中输出(千万别把索引名和轴标签弄混了!!!):
在这里插入图片描述
这里frame.index.names 是索引名
frame.columns.names是轴标签
甚至可以单独创建层次化索引然后复用,上面的DataFrame中的列就可以这样创建:
在这里插入图片描述

重排分级顺序

有些时候,需要重排某笤帚上面各个级别的顺序,或根据指定级别上的值对数据进行重新排序。swaplevel方法就是接受2个级别编号或名称,返回了一个互换了级别的新对象(数据保持不变):
在这里插入图片描述
而sortlevel则根据单个级别中的值对数据进行排序(一定的固定顺序),交换级别时,有时也会用到sortlevel,这样的结果就是有序的了。
在这里插入图片描述

根据级别进行汇总统计

对DataFrame和Series的汇总统计都有一个level选项,他用特定在某条轴上求和的级别。
在这里插入图片描述
set_index函数的作用:
在这里插入图片描述
默认情况下,那些转换的列会被DataFrame从原来的位置移走,但也可以将其保留下来
在这里插入图片描述
reset_index的功能和set_index刚好相反,层次化的索引的级别会被转移到列里面:
在这里插入图片描述
这里就先介绍到这里,其他的部分再进行些许的补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值