跳转至

9.1.Series

import pandas as pd
from pandas import Series
from toolkit import H
Windows 10
Python 3.8.8 @ MSC v.1928 64 bit (AMD64)
Latest build date 2021.02.27
pandas version:  1.2.2

Series是能够保存任何类型的数据的一维数组。Series类似numpy的一维ndarray,但是和ndarray又不同,ndarray的所有元素的类型或结构必须相同1,而Series能保存不同类型、结构的数据;另外Series的元素带有索引。Series像一个有序字典,因为它是索引值到数据值的一个映射。它可以用在许多原本需要字典参数的函数中。

可以通过以下方式创建Series数据结构:

  • 字典
  • 一维NumPy数组
  • 单个标量:数值标量、字符串
  • list、tuple(可以是多层嵌套的list、tuple)

Series类

Series(data=None, index=None, dtype=None, name=None, copy=False,
       fastpath=False)

参数:

  • datadictarray-likelistscalar。如果是序列或数组,则必须是一维的

    • 如果是字典,则字典的键指定了label。如果同时使用了index,则以index为准。
    • 如果是标量,则结果为:该标量扩充为index长度相同的列表。
  • index:一个array-like或者一个Index对象。它指定了label。其值要求hashable,但不要求惟一,长度与data一致。如果未提供,则使用RangeIndex (0, 1, 2, ..., n)

  • namestrSeries的名字。
  • dtype:指定数据类型。如果为None,则数据类型被自动推断
  • copy:一个布尔值。如果为True,则拷贝输入数据data

还可以通过类方法创建Series

Series.from_array(arr, index=None, 
                  name=None, dtype=None,
                  copy=False, fastpath=False)

from_array类方法从pandas 0.23版本起不再推荐使用,在未来的版本中会被移除。

print("pandas version:", pd.__version__)
print("Has 'from_array' attr?", hasattr(Series, "from_array"))
pandas version: 1.2.2
Has 'from_array' attr? False

dict来创建

如果只传入一个字典,则结果Series中的索引就是原字典的键:

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
# dict的key是无序的,但series的index是有序的
Series(sdata)
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

也可以指定原字典的key的排列顺序:

注意

如果传入dict和并指定index,index需要和dict的键匹配,若index不在dict的key中,对应的series值则为NaN。

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
states = ['California', 'Ohio', 'Oregon', 'Texas']
Series(sdata, index=states)
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

从NumPy数组来创建

数组必须是一维的:

import numpy as np
a = np.array([1,2,3])
Series(a)
0    1
1    2
2    3
dtype: int32

从标量创建

如果提供索引,将重复标量值以匹配索引的长度。

Series(5, index=[0, 1, 2, 3])
0    5
1    5
2    5
3    5
dtype: int64

  1. 实际上numpy可以定义储存不同类型数据的结构数组。