Python-Pandas模块Series

1. 什么是Series?Series是一种类似于一维数组的对象,与一维数组对象不同的是Series带有标签(索引),通俗来说就是一维带标签(索引)的一维数组 。如下图所示:

Python-Pandas模块Series

文章插图
带有索引的一维数组
2. 如何创建Series?Series是一维带标签(索引)的一维数组,对于Series最关键的也就是索引index和与之对应的value值 。
一般格式 (这里的data就是value值的集合):
s = pd.Series( data , index )
data几种常见的取值类型:
  1. 标量值、list列表;
  2. ndarray对象;
  3. dict字典;
index取值规范:
  1. 索引值必须是可hashable的(如果一个对象是可散列的,那么在这个对象的生命周期中,他的散列值是不会变的(它需要实现__hash__()方法)),并且索引index的长度必须和value值的长度一致,如果不一致会抛出异常(这点需要格外的注意);
  2. 如果不设置索引,默认索引是从0到n-1的序列值[其中n为data值的长度];
  3. 如果data的类型为dict字典类型,对应的字典中的key值就是对应series对象中的index值;
  4. 相同的索引值也是可以的;
下面依照着data的几种常见的类型来分别介绍,中间会穿插着index的取值规范问题:
2.1 data为标量值、list列表
#data:标量值1#index:不指定(默认索引)import pandas as pds = pd.Series(1)print(s)result:01dtype: int64#data:list列表#index:通过list列表指定,其中data和index长度一致import pandas as pds = pd.Series([1,2,3,4,5],index = ["a","a","c","d","e"])print(s)result:a1a2c3d4e5dtype: int64注意:
  • 当创建Series对象的时候指定index的时候,index元素个数(此处的index为一个list列表)要和data中元素个数相等;
  • 使用相同的索引值"a",程序并没有发生异常,索引值可以是相同的;
2.2 data为ndarray对象
import numpy as npimport pandas as pddata = https://www.isolves.com/it/cxkf/bk/2020-07-19/np.arange(5)#使用list作为index索引index2 = ["a","b","c","d","e"]#使用ndarray数组作为index索引index3 = np.array(["a","b","c","d","e"])s = pd.Series(data)s2 = pd.Series(data,index2)s3 = pd.Series(data,index3)print(s)print("-"*6)print(s2)print("-"*6)print(s3)result:0011223344dtype: int32------a0b1c2d3e4dtype: int32------a0b1c2d3e4dtype: int32注意:
  • 此时的data是ndarray数组类型,而index分别指定了无参数的默认index索引、指定list列表以及指定ndarray数组类型的index 。
2.3 data为dict字典
import pandas as pdd = {"a":0,"b":1,"c":2}s = pd.Series(d)print(s)result:a0b1c2dtype: int64【Python-Pandas模块Series】这里由于将data位置的参数传入字典,将字典的键作为了Series对象的index,所以如果再次指定index的时候会出现一些新的情况:
  1. 指定的index中不包含字典中的键值;
  2. 指定的index中包含部分字典中的键值;
  3. 指定的index中包含全部的字典中键值;
下面就使用代码简单的介绍一下这三种情况 。
  • 指定的index中不包含字典中的键值
import pandas as pdd = {"a":0,"b":1,"c":2}s = pd.Series(d,index = ["d","e"])print(s)result:dNaNeNaNdtype: float64
  • 指定的index中包含部分字典中的键值
import pandas as pdd = {"a":0,"b":1,"c":2}s = pd.Series(d,index = ["a","d"])print(s)result:a0.0dNaNdtype: float64
  • 指定的index中包含全部的字典中键值
import pandas as pdd = {"a":0,"b":1,"c":2}s = pd.Series(d,index = ["a","b","c"])print(s)result:a0b1c2dtype: int64总结:
我们知道创建Series对象的一般格式,包含两个参数data和index索引 。我们使用Python字典作为创建Series的data,同时我们知道当将字典作为创建Series对象的data的话,Python字典中的key可以作为Series的index,但是此时我们仍然可以继续指定index,通过上面的三种情况的描述,可以得出结论,使用字典创建Series,同时指定index的话,此时的index起到一个筛选的作用,最终的输出结果就是指定的index,如果指定的index在字典中的key中,则将对应的值关联到指定的index中;如果指定的index不在字典中的key中,则将NaN关联到指定index中 。由于Python中字典中的key不能够重复,所以虽然Series允许使用有重复的index值,但是如果使用字典创建Series的时候肯定不会有相同的index值 。


推荐阅读