前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[L1]快速掌握Series~创建Series

[L1]快速掌握Series~创建Series

作者头像
触摸壹缕阳光
发布2020-04-26 15:12:17
1.2K0
发布2020-04-26 15:12:17
举报

前言

由于在公众号上文本字数太长可能会影响阅读体验,因此过于长的文章,我会使用"[L1]"来进行分段。这系列将介绍Pandas模块中的Series,本文主要介绍:

  • 什么是Series?
  • 如何创建Series?

a 什么是Series?

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

▲带有索引的一维数组

b 如何创建Series?

Series是一维带标签(索引)的一维数组,对于Series最关键的也就是索引index和与之对应的value值

一般格式 (这里的data就是value值的集合):

代码语言:javascript
复制
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的取值规范问题:

data为标量值、list列表

代码语言:javascript
复制
#data:标量值1
#index:不指定(默认索引)
import pandas as pd
s = pd.Series(1)
print(s)

result:
0    1
dtype: int64
代码语言:javascript
复制
#data:list列表
#index:通过list列表指定,其中data和index长度一致
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ["a","a","c","d","e"])
print(s)

result:
a    1
a    2
c    3
d    4
e    5
dtype: int64

注意:

  • 当创建Series对象的时候指定index的时候,index元素个数(此处的index为一个list列表)要和data中元素个数相等;
  • 使用相同的索引值"a",程序并没有发生异常,索引值可以是相同的;

data为ndarray对象

代码语言:javascript
复制
import numpy as np
import pandas as pd

data = 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:
0    0
1    1
2    2
3    3
4    4
dtype: int32
------
a    0
b    1
c    2
d    3
e    4
dtype: int32
------
a    0
b    1
c    2
d    3
e    4
dtype: int32

注意:

  • 此时的data是ndarray数组类型,而index分别指定了无参数的默认index索引、指定list列表以及指定ndarray数组类型的index。

data为dict字典

代码语言:javascript
复制
import pandas as pd

d = {"a":0,"b":1,"c":2}
s = pd.Series(d)
print(s)

result:
a    0
b    1
c    2
dtype: int64

这里由于将data位置的参数传入字典,将字典的键作为了Series对象的index,所以如果再次指定index的时候会出现一些新的情况:

  1. 指定的index中不包含字典中的键值;
  2. 指定的index中包含部分字典中的键值;
  3. 指定的index中包含全部的字典中键值;

下面就使用代码简单的介绍一下这三种情况。

  • 指定的index中不包含字典中的键值
代码语言:javascript
复制
import pandas as pd
d = {"a":0,"b":1,"c":2}
s = pd.Series(d,index = ["d","e"])
print(s)

result:
d   NaN
e   NaN
dtype: float64
  • 指定的index中包含部分字典中的键值
代码语言:javascript
复制
import pandas as pd
d = {"a":0,"b":1,"c":2}
s = pd.Series(d,index = ["a","d"])
print(s)

result:
a    0.0
d    NaN
dtype: float64
  • 指定的index中包含全部的字典中键值
代码语言:javascript
复制
import pandas as pd
d = {"a":0,"b":1,"c":2}
s = pd.Series(d,index = ["a","b","c"])
print(s)

result:
a    0
b    1
c    2
dtype: 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值。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • a 什么是Series?
  • b 如何创建Series?
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档