专栏首页AI机器学习与深度学习算法[L1]快速掌握Series~创建Series

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

前言

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

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

a 什么是Series?

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

▲带有索引的一维数组

b 如何创建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的取值规范问题:

data为标量值、list列表

#data:标量值1
#index:不指定(默认索引)
import pandas as pd
s = pd.Series(1)
print(s)

result:
0    1
dtype: int64
#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对象

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字典

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中不包含字典中的键值
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中包含部分字典中的键值
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中包含全部的字典中键值
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值。

本文分享自微信公众号 - AI机器学习与深度学习算法(AI-KangChen),作者:Chenkc

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [L2]快速掌握Series~Series的属性

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

    触摸壹缕阳光
  • [L4]快速掌握Series~Series的切片和增删改查

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

    触摸壹缕阳光
  • [L5]快速掌握Series~过滤Series的值和缺失值的处理

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

    触摸壹缕阳光
  • 动手学深度学习(一)——逻辑回归(从零开始)

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn....

    Tyan
  • 用Python验证指数基金定投策略

    运行代码之后返回到Jupyter Notebook的主页,就能看到保存的000300.csv文件,可以下载到本地进行操作,也可以直接在聚宽的研究环境中进行操作。...

    数据医生
  • 三层架构(二)——为什么要用三层架构?

    层次结构在现实社会中随处可见。记得有个笑话讲有个村长得意的向他的老婆吹牛:“全中国比我官大的只有四个人,乡长、县长、省长和国务院总理”,这个笑话体现了真实社会...

    令仔很忙
  • Receptive field(感受野)

    终于在知乎上中找到深度神经网络中的感受野(Receptive Field) - 蓝荣祎的文章 - 知乎 ) 算是弄清了基本原理,记录以备忘

    用户7787521
  • AI芯片技术“分叉”百害无利,国产芯片大有可为

    本次采访中,AI 科技大本营邀请到了中国信通院云大所人工智能部副主任王蕴韬,从 AI 芯片标准、落地实践等方面,来谈一下“中国芯”的前路在何方。

    AI科技大本营
  • [Keras实用技巧]·错误Sequential has no attribution “validation_data”解决

    错误描述:Sequential has no attribution “validation_data”

    小宋是呢
  • VC调试时输出调试信息到Debug窗口

    TRACE宏(afx.h, AfxTrace) (TRACE将信息输出到afxDump对象,只在_DEBUG定义时输出,最多输出512个字符,格式化与prin...

    战神伽罗

扫码关注云+社区

领取腾讯云代金券