pandas基础 -- Series数据结构

原创
2019/07/10 14:47
阅读数 110

Series数据结构

简介
  • Series又称之为序列
  • Series是一种类似于一维数组的对象,由下面两个部分组成:
    • values:一组数据(ndarray类型)
    • index:相关的数据索引标签
    • name: 为该序列起一个名字,主要在形成DataFrame时,方便行/列的操作
  • 由于序列包含了ndarray的结构,所以他可以支持元素级的操作和广播特性
import pandas as pd
import numpy as np

s1 = pd.Series(data=[62, 75, 88, 83])
s1
---------------------------------------------------------------------------
结果:
0    62
1    75
2    88
3    83
dtype: int64
  • 默认一个Series左边的称之为索引Index,右边的称之为值values
  • 若没有指定索引,默认按照自然数0开始递增
  • 可以通过series下的index和values属性访问索引和值
s1.index
---------------------------------------------------------------------------
结果:RangeIndex(start=0, stop=4, step=1)

s1.values
---------------------------------------------------------------------------
结果:array([62, 75, 88, 83], dtype=int64)

s1.name = '数学'
s1
---------------------------------------------------------------------------
结果:
0    62
1    75
2    88
3    83
Name: 数学, dtype: int64
Series创建

创建的空间特性

  • 可以使用两种创建方式
    • 1).列表或ndarray
      • 列表会进行拷贝
      • ndarr
    • 2).字典结构
      • 字典的key就是Series的index
      • 字典的value就是Series的values
data_list = [2, 4, 5, 8]
data_array = np.array(data_list)
s2 = pd.Series(data=data_list, index=list("ABCD"))
s3 = pd.Series(data=data_array, index=list("ABCD"))
s2[0] = 100
s3[0] = 100
display(data_list, data_array, s2, s3)
---------------------------------------------------------------------------
结果:
[2, 4, 5, 8]
array([100,   4,   5,   8])
A    100
B      4
C      5
D      8
dtype: int64
A    100
B      4
C      5
D      8
dtype: int32

data_dict = {"A": 10, "B": 20, "C": 30, "D": 40}
s4 = pd.Series(data=data_dict)
s4
---------------------------------------------------------------------------
结果:
A    10
B    20
C    30
D    40
dtype: int64
Series的索引和切片
  • 序列具备一维ndarray的特性,所以索引和切片的方式同理一样的语法
  • 序列的索引和切片的语法形式:
    • 数字行为,和ndarray行为一致
      • 前闭后开
    • index值行为,Series还有index的属性,方便操作
      • 前闭后闭
display(s4[0], s4[3])
---------------------------------------------------------------------------
结果:
10
40

display(s4[:3])
---------------------------------------------------------------------------
结果:
A    10
B    20
C    30
dtype: int64

display(s4["A"], s4["D"])
---------------------------------------------------------------------------
结果:
10
40

s4[:"C"]
---------------------------------------------------------------------------
结果:
A    10
B    20
C    30
dtype: int64

序列同时增加了loc和iloc的属性,方便切片

  • loc[] : 跟index的值操作,又称之为显示索引
  • iloc[]: 跟数字的操作一致,又称之为隐式索引
s4.loc["B":"C"]
---------------------------------------------------------------------------
结果:
B    20
C    30
dtype: int64

s4.iloc[1:3]
---------------------------------------------------------------------------
结果:
B    20
C    30
dtype: int64
序列的操作
  • 可以把Series看成一个定长的有序字典
  • 查看序列
    • series.head(n) : 看前n行的数据
    • series.tail(n) : 看后n行的数据
  • 当索引没有对应的值时,出现缺失数据显示NaN的情况
    • 当2个序列相加时,是按照索引值对应相加,若没有对应的索引,结果以NaN出现
s5 = pd.Series(data=[1, 2, 3, 4], index=list("ABCD"))
s6 = pd.Series(data=[2, 3, 4, 5], index=list("ABEF"))
s7 = s5+s6
s7
---------------------------------------------------------------------------
结果:
A    3.0
B    5.0
C    NaN
D    NaN
E    NaN
F    NaN
dtype: float64
  • 序列如何查看哪些位置是NaN值
    • 可以使用pd.isnull(),pd.notnull(),或自带isnull(),notnull()函数检测缺失数据
    • 函数说明:
      • pd.isna()/pd.isnull() : 探测序列中每个元素是否为NaN,返回布尔序列。
      • pd.notna()/pd.notnull() : 探测序列中每个元素是否不为NaN,返回布尔序列。
    • 利用上一步产生的布尔索引,在series中重新投影即可
pd.isna(s7)
---------------------------------------------------------------------------
结果:
A    False
B    False
C     True
D     True
E     True
F     True
dtype: bool
序列的计算
  • 适用于numpy的数组运算也适用于Series
  • Series之间的运算
  • 在运算中自动对齐不同索引的数据
    • 如果索引不对应,则补NaN
  • 注意:要想保留所有的index,则需要使用.add()函数
    • 利用add函数里,有一个fill_value的参数,对缺失值位置补上对应的值
s8 = s5.add(s6, fill_value=0)
s8
---------------------------------------------------------------------------
结果:
A    3.0
B    5.0
C    3.0
D    4.0
E    4.0
F    5.0
dtype: float64
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部