Series 是一种类似于 Numpy 中一维数组的对象,它由一组任意类型的数据以及一组与之相关的数据标签(即索引)组成。举个最简单的例子:
上面的代码将打印出如下内容:
左边的是数据的标签,默认从 0 开始依次递增。右边是对应的数据,最后一行表明了数据类型。
我们也可以像下面这样使用 index 参数自定义数据标签:
运行结果如下:
我们还可以直接使用字典同时创建带有自定义数据标签的数据,pandas 会自动把字典的键作为数据标签,字典的值作为相对应的数据。
运行结果和上面一样:
访问 Series 里的数据的方式,和 Python 里访问列表和字典元素的方式类似,也是使用中括号加数据标签的方式来获取里面的数据。
有了带标签的数据有什么用呢?为什么不直接使用 Python 自带的列表或字典呢?
是因为 pandas 有着强大的数据对齐功能,什么意思呢?我给你举个例子你就明白了。
假设你开了个小卖部,每天统计了一些零食的销量,你想看一下前两天的总销量如何。使用 pandas 的话,你可以这样写:
上面直接将两个 Series 相加的结果如下:
神奇的事发生了,pandas 自动帮我们将相同数据标签的数据进行了计算,这就是数据对齐。
而如果不用 Series,只用列表或字典,我们还要使用循环来进行计算。而用了 pandas 的 Series,只需要简单的相加即可。
你可能会有疑问,如果两天卖出的零食不一样怎么办,pandas 还能进行数据对齐吗?我们试一下就知道了。
上面的数据中,只有辣条和面包这两个数据标签是相同的,剩下的数据标签各不相同。上述代码的运行结果如下:
可以看到,对于数据标签不相同的数据,运算后结果是NaN。NaN 是 Not a Number(不是一个数字)的缩写,因为其中一个 Series 中没有对应数据标签的数据,无法进行计算,因此返回了 NaN。
对于这种情况,我们想让没有的数据默认为 0,然后再进行计算。这种需求 pandas 可以实现吗?
当然可以!只需调用 Series 的 add()
方法,并设置好默认值即可。具体用法如下:
这样我们就能得到期望的正确结果:
add()
方法对应的是加法,数学中的四则运算在 pandas 中都有一一对应的方法,它们的用法都是类似的。具体对应关系如下图所示: