Python数据分析中数据对齐功能都是自动的,这些你知道吗?

该号刚出生不久,喜欢的朋友别忘了点个关注。

在进行数据分析的过程中,经常会需要某一列与某一列进行计算,甚至某一个数据块与另外的数据块进行计算。如果相应的数据结构的形状相同还好,多数分析软件都能应对。若数据结构的形状有一定的差异,应该如何处理,如何对齐,如何运算呢?

在对齐这个方面,Python的数据分析库,pandas做的就非常好,我们可以通过对pandas的基础数据结构——Series的简单分析来窥探一二。

我们可以先从Series的创建入手。Series的创建,遵从index优先的法则。我们知道,在创建Series时,可以使用字典直接将索引和数值一次性交代清楚,比如下面:

在创建过程中,字典的键则转化为Series的索引,字典的值转化为Series的值。这个没什么疑问。然而有个问题是,字典是无序的键值对,但Series却是有序的,因此出现了像上图的情况:你的Series最终呈现出来的顺序,并不是你心里想要的,因为字典无序。

在这种情况下,我们就需要在创建Series的时候传入index参数,告诉pandas,告诉Python,你想要的顺序是怎样的。

如上图,当你传入了一个有序的列表,Python就知道你是要指定这样一个顺序,并且会自动将列表和字典进行对比,A对应A的值,B对应B的值,顺序正确的情况下,一一对应关系也不会错乱。

如果我的index多传了或者少传了元素会怎么办?

记住上面的话,index优先。即字典的键的数量和index的元素个数不匹配的时候,以index为准,多退少补。补的话自然是用NaN来补充了。

无论是多了还是少了,总之索引与值的对应关系不会乱,这是pandas的强大之处。

同样的,我们在操作两个Series进行加减乘除之类的运算时,也会先进行索引的对齐,然后再进行运算。

我们重新构造一个Series:

然后将该Series颠倒一下顺序赋值给另一个变量s2,这样就相当于构造出另一个新的Series了。

想一想,如果我现在用s+s2,会出现怎样的结果?会直接第一行与第一行的数相加,第二行与第二行相加,以此类推吗?

如果是这样的话,那么pandas就是一废物了。

可以看出,在相加之前,pandas会先对数据做对齐工作,而这个对齐,并不是基于空间上的位置,而是基于索引(index)的,相同的索引上的数据才会进行相加。因此你的空间顺序无论如何打乱,只要索引与值的对应关系没变,都不要紧。

这就是pandas的强大之处,也是pandas能从众多Python第三方数据分析工具里脱颖而出的原因之一。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181109A0RBA600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券