[L3]快速掌握Series~通过Series索引获取指定值

2020-05-13 14:27:49 浏览数 (1)

全文字数:1561字

阅读时间:8分钟

前言

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

  • 通过Series的索引获取值
    • 位置索引
    • 名称索引
    • 点索引

快速掌握Series系列:

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

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

a

Series的索引

Series简单来说就是带有索引的一维数组,很自然的可以通过索引来获取对应的value值,我们有三种方式进行索引:

  1. 位置索引。通过0 ~ n-1[n为Series中索引个数]进行索引;
  2. 名称索引。通过传入指定的index名称来进行索引;
    1. 获取单个索引值;
    2. 获取多个索引值;
  3. 点索引。通过".index名称"的形式进行索引;

下面来分别介绍这三种索引方式以及需要注意的地方。

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

s = pd.Series([1,2,3,4],index = ["a","b","c","d"])
print(s)
  • 位置索引
代码语言:javascript复制
# 位置索引
print(s[0])
print(s[-1])
print(s[2])

result:
1
4
3

此处的位置索引类似python中的list列表,不仅能够正向索引[从0开始]而且还能够反向索引[从-1开始反向索引]。

  • 名称索引
代码语言:javascript复制
# index名称索引
#获取单个索引值
print(s["a"])
print("*"*6)
#获取多个索引值
print(s[["a","b","c"]])

result:
1
******
a    1
b    2
c    3
dtype: int64

使用名称索引不仅可以索引单个value值,也可以索引多个value值。平时用的最多的就是位置索引和名称索引,说一说使用他们的时候需要注意的地方:

  • 我们知道Series的index索引可以是任意类型,如果index为整数类型,那么位置索引就会失效。
代码语言:javascript复制
import pandas as pd
s = pd.Series(["a","b","c","d"],index = [1,3,4,5])

# 此处使用位置索引会抛出异常KeyError
# print(s[-1])
# print(s[2])

#此处得到的结果是名称索引
print(s[3])

result:
b
  • 由于Series的index是可以重复的,对于位置索引来说无论index是否重复都与索引没有关系,但是如果使用名称索引的话,索引出来的是结果是一个具有相同index的Series对象。
代码语言:javascript复制
import pandas as pd
s = pd.Series(["a","b","c","d"],index = [1,1,4,5])

# 此处使用的是名称索引
print(s[1])
result:
1    a
1    b
dtype: object
  • 点索引

平时使用名称索引以及位置索引足够使用。点索引使用有很多局限性:

  1. 点索引只使用于Series的index类型为非数值类型才可以使用;
  2. 如果Series中的index中有一些索引名称与Python的一些关键字或者一些函数名重名的话,会导致无法获取Series的值;
代码语言:javascript复制
import pandas as pd

# 此时的index为数值类型
s = pd.Series(["a","b","c","d"],index = [1,2,3,4])

# 会抛出语法错误的异常SyntaxError
# print(s.2)
代码语言:javascript复制
import pandas as pd

# 此时的index为数值类型
s = pd.Series([1,2,3,4],index = ["a","b","c","def"])

# 通过点索引获取value值
print(s.a)
# 会抛出语法错误的异常SyntaxError
# print(s.def)

result:
1

0 人点赞