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)
参数:
-
data
:dict
、array-like
、list
、scalar
。如果是序列或数组,则必须是一维的- 如果是字典,则字典的键指定了
label
。如果同时使用了index
,则以index
为准。 - 如果是标量,则结果为:该标量扩充为
index
长度相同的列表。
- 如果是字典,则字典的键指定了
-
index
:一个array-like
或者一个Index
对象。它指定了label
。其值要求hashable
,但不要求惟一,长度与data
一致。如果未提供,则使用RangeIndex (0, 1, 2, ..., n)
。 name
:str
,Series
的名字。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
-
实际上numpy可以定义储存不同类型数据的结构数组。 ↩