(二) Pandas模块之Series

一.Series

Series是一种类似与一维数组的对象,由下面两个部分组成:
    - values:一组数据(ndarray类型)
    - index:相关的数据索引标签

导包:

import pandas as pd
from pandas import Series,DataFrame
import numpy as np

二.Series的创建

两种创建方式:

(1) 由列表或numpy数组创建:默认索引为0到N-1的整数型索引

#使用列表创建Series,通过index参数设置该Series的显示索引
#注意:使用了显示索引,该Series依然具有隐式索引
Series(data=[1,2,3,4],index=['one','two','three','four'])
#返回结果为:
one      1
two      2
three    3
four     4
dtype: int64


#使用numpy创建Series
Series(data=np.arange(10,60,6))
#返回结果为:
0    10
1    16
2    22
3    28
4    34
5    40
6    46
7    52
8    58
dtype: int64

(2) 由字典创建:不能在使用index.但是依然存在默认索引

注意:数据源必须为一维数据

dic = {
    'math':100,
    'English':50
}
Series(data=dic,name='期末')

#结果为:
math       100
English     50
Name: 期末, dtype: int64

练习1:

使用多种方法创建以下Series,命名为s1:
语文 150
数学 150
英语 150
理综 300

三.Series的索引和切片

可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时返回的是一个Series类型)。

(1) 显式索引:

- 使用index中的元素作为索引值
- 使用s.loc[](推荐):注意,loc中括号中放置的一定是显示索引

注意,此时是闭区间

s = Series(np.random.randint(60,100,size=(5,)),index=['a','b','c','d','e'])
s['b'] #取单个索引对应的数据值
s[['b','c']]#取多个索引对应的数据值
s.loc['b'] #取单个索引对应的数据值
s.loc[['b','c']]#取多个索引对应的数据值

#注意:在Series中使用loc或者不使用效果一样

(2) 隐式索引:

    - 使用整数作为索引值
    - 使用.iloc[](推荐):iloc中的中括号中必须放置隐式索引

注意,此时是半开区间

s = Series(np.random.randint(60,100,size=(5,)),index=['a','b','c','d','e'])
s[1] #取单个索引对应的数据值
s[[1,2]]#取多个索引对应的数据值
s.iloc[1] #取单个索引对应的数据值
s.iloc[[1,2]]#取多个索引对应的数据值

#注意:在Series中使用iloc或者不使用效果一样

(3) 切片

- 显示索引切片:index和loc :

            s.loc['b':'c']

- 隐式索引切片:整数索引值和iloc

             s.iloc[1:2]

四.Series的基本概念和运算

- 可以把Series看成一个定长的有序字典。向Series增加一行:相当于给字典增加一组键值对

- 可以通过shape,size,index,values等得到series的属性

- 可以使用s.head(),tail()分别查看Series的前n个和后n个值

- 对Series元素进行去重

s = Series(data=[1,1,2,2,3,3,4,4,4,5,6,7,8,7,7,66,43,342,6665,444,333,444])
s.unique()   #Series中的去重函数

- 当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况

 Series之间的运算

  • 在运算中自动对齐不同索引的数据
  • 如果索引不对应,则补NaN
s1 = Series(data=[1,2,3,4,5],index=['a','b','c','d','e'])
s2 = Series(data=[1,2,3,4,5],index=['a','b','c','f','g'])
s = s1+s2

#结果为:
a    2.0
b    4.0
c    6.0
d    NaN
e    NaN
f    NaN
g    NaN
dtype: float64

- 可以使用pd.isnull(),pd.notnull(),或s.isnull(),notnull()函数检测缺失数据

#True/False是可以作为Series的索引
s.iloc[[True,False,True,True,False,True,True]]   
#检测s中存在的空值,并将空值进行过滤
condition = s.notnull() #对Series元素进行非空判定
s.loc[condition]   #空值检测,过滤

练习:

  1. 想一想Series运算和ndarray运算的规则有什么不同?

  2. 新建另一个索引包含“文综”的Series s2,并与s2进行多种算术操作。

 

posted @ 2019-07-10 15:45  tiger_li  阅读(591)  评论(0编辑  收藏  举报