Series数据结构简介

Series数据结构

1 概念

Series就像是竖着的list。所以,一般创建Series需传入一个list
同时,它包含了 dict 的特点,用get进行取值,同样,也可以使用ndarray的特点进行切片操作。

示例-1 创建一个简单的Series

import pandas as pd
import numpy as np

s = pd.Series([1,2,3,np.nan,5,6])
print(s)

#执行结果
0 1
1 2
2 3
3 NaN
4 5
5 6

注:

numpy中对不存在的值,都赋为NaN;

② 执行结果的第一列值是index(索引,默认)
也可以创建Series时,指定index,比如:

s = pd.Series([1,2,3,np.nan,5,6],index=['a','b','c','d','e','f'])

示例-2 创建一个Series存储年龄数据

Series存储了四个年龄:19/31/25/24,只需将要存储的数据构建成一个List,然后赋值给data参数即可。

user_age = pd.Series(data=[19, 31, 25, 24])
print user_age

#执行结果:
0    19
1    31
2    25
3    24
dtype: int64

示例-3 使Series的index有意义

可以通过 Seriesindex(索引)来为Series中存储的数值赋予一定的含义。比如:年龄肯定是对应一个姓名。

user_age.index = ["xiaoming", "xiaohong", "xiaohei", "xiaobai"]
print user_age

#执行结果:
xiaoming    19
xiaohong    31
xiaohei     25
xiaobai     24
dtype: int64

示例-4 为Series的index起名字

现在姓名与年龄已经完全对应上了。但是别人不知道index代表的是姓名的含义,所以,需要为index起个名字。

user_age.index.name = "name"
print user_age

#执行结果:
name
xiaoming    19
xiaohong    31
xiaohei     25
xiaobai     24
dtype: int64

示例-4 为Series起名字

就像我们给index起名字一样,我们也可以给Series 起个名字。

user_age.name="user_age_info"
print user_age

#执行结果:
name
xiaoming    19
xiaohong    31
xiaohei     25
xiaobai     24
Name: user_age_info, dtype: int64

通过上面一系列的操作,我们对 Series 的结构上有了基本的了解,简单来说,一个Series 包括了 dataindex 以及 name

示例-5 完整演示上述零碎的知识点

# 构建索引
name = pd.Index(["xiaoming", "xiaohong", "xiaohei", "xiaobai"], name="name")
# 构建 Series
user_age = pd.Series(data=[19, 31, 25, 24], index=name, name="user_age_info")
print user_age

#执行结果:
name
xiaoming    19
xiaohong    31
xiaohei     25
xiaobai     24
Name: user_age_info, dtype: int64

示例-6 指定Series数据类型

上述示例中,我们并没有为 Series 指定元素的数据类型,这时,Pandas 会自动判断数据类型。
当然了,我们也可以自己手动指定数据类型。

# 指定类型为浮点型
user_age = pd.Series(data=[19, 31, 25, 24], index=name, name="user_age_info", dtype=float)
print user_age

#执行结果:
name
xiaoming    19.0
xiaohong    31.0
xiaohei     25.0
xiaobai     24.0
Name: user_age_info, dtype: float64

示例-7 获取Series中元素的方式[index]和get(index)

Series 包含了 dict 的特点,也就意味着可以使用与dict 类似的一些操作。我们可以将index 中的元素看成是 dict 中的key

# 获取 Tom 的年龄
user_age["xiaoming"]

#执行结果:
19.0

此外,可以通过get方法来获取。通过这种方式的好处是当索引不存在时,不会抛出异常。

user_age.get("xiaoming")

#执行结果:
19.0

Series 除了像dict 外,也非常像 ndarray,这也就意味着可以采用切片操作。

示例-8 获取Series中元素的方式-切片

# 获取第一个元素
user_age[0]

#执行结果:
19.0

# 获取前三个元素
user_age[:3]
#执行结果:
name
xiaoming    19.0
xiaohong    31.0
xiaohei     25.0
Name: user_age_info, dtype: float64


# 获取第4个和第二个元素
user_age[[3, 1]]
执行结果:
name
xiaobai     24.0
xiaohong    31.0
Name: user_age_info, dtype: float64

示例-9 获取Series中元素的方式-布尔

# 获取年龄大于30的元素
user_age[user_age > 30]
#执行结果:
name
xiaohong    31.0
Name: user_age_info, dtype: float64

可以看到,无论我们通过切片如何操作 Series ,它都能够自动对齐 index

示例-10 Series 的向量化操作

Seriesndarray 一样,也是支持向量化操作的。同时也可以传递给大多数期望 ndarrayNumPy 方法。

user_age + 1

#执行结果:
name
xiaoming    20.0
xiaohong    32.0
xiaohei     26.0
xiaobai     25.0
Name: user_age_info, dtype: float64

再比如:

np.exp(user_age)

2 利用pandas判断Series的空值null

pd.isnull(s)
pd.notnull(s)

3 Series自身判断空值null

s.isnull()

4 Series的简单方法

s = pd.Series([1,3,5,6],index=['a','b','c','d'])
s[s>5]
s*5

猜你喜欢

转载自blog.csdn.net/u013725394/article/details/85252560