Python——pandas模块—Series数据结构

Python——pandas模块—Series数据结构

    • Python——pandas模块—Series数据结构
  • pandas
  • Series
    • 创建Series
      • 没有指定索引列时,自动创建:0~~(N-1)(N:数组长度)的整数型索引
      • 指定索引列index(数字,字符串)这点与数组不同,数组中的元素类型要相同
      • 使用列表、数组构建Series
      • 通过字典/字典对象的方式创建Series
    • 访问Sreies
      • Series.head()从前访问
      • Series.tail()从后访问
      • Sreies.index查看索引列
      • Sreies.values查看数据列
      • Series.dtype查看数据类型
    • Series的使用
      • 使用一个Series创建另一个Series
      • 缺失值检测
      • 非缺失值检测
      • 练习
    • 查找Series(索引)
      • [索引名]
      • [索引位置下标]
    • 切片操作
      • 索引位置切片 [索引位置:索引位置:步长]
      • 索引值切片[索引值:索引值]
    • 索引列重新赋值
    • Series的运算
      • 一个Series与数值做运算
      • 两个Series运算
  • 总结:

Python——pandas模块—Series数据结构

pandas

Numpy更适合处理统一的数值数组数据
pandas是专门为处理表格和混杂数据设计的
panda有两种数据结构:

  1. Series
  2. DataFrame

Series

  1. Series数据类型能够保存 任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组轴标签统称为索引,每个元素都带有一个索引
  2. Series表现形式:索引在左边,值在右边
  3. 可以通过Series的属性:
    index ——获取——索引列
    values——获取——数据列

可以这样想:每一个元素可以类似的看成一个字典,整个Series可以类似的看成一个二维数组

如图:
Python——pandas模块—Series数据结构_第1张图片

创建Series

没有指定索引列时,自动创建:0~~(N-1)(N:数组长度)的整数型索引

import pandas as pd
#通过传入一个列表用Series函数创建
obj = pd.Series([4,7,-5,3])
print('创建的Series对象为')
print(obj)

自动添加整数索引 0~~4(数组长度为4)
Python——pandas模块—Series数据结构_第2张图片

指定索引列index(数字,字符串)这点与数组不同,数组中的元素类型要相同

#指定索引列创建Series对象
obj = pd.Series([4,2,-5,3],index=[2,1,1,'r_4'])
print('指定索引列创建Series对象')
print(obj)

Python——pandas模块—Series数据结构_第3张图片

使用列表、数组构建Series

lis = [1,2,3,4,5,6,7]
array = np.arange(7)
Series_lis = pd.Series(lis)
Series_array = pd.Series(array)
print('通过列表创建的Series')
print(Series_lis)
print('通过数组创建的Series')
print(Series_array)

同样,还是自动添加索引列
Python——pandas模块—Series数据结构_第4张图片

通过字典/字典对象的方式创建Series

不同的是,在字典里的key不可重复
但是在Series中index是可以重复的

#创建一个字典对象方式
dic = dict(zip(lis,array))
#zip打包zip(lis,array)操作之后形成一个元组列表
Series_dict = pd.Series(dic)
print('通过字典对象创建的Series对象:')
print(Series_dict)
#直接传入字典方式
Series_dict2 = pd.Series({'a':1,'b':2,'c':3,'d':4})
print('直接传入字典的方式创建的Series')
print(Series_dict2)

Python——pandas模块—Series数据结构_第5张图片

访问Sreies

再来看一个字典构建Series实例

dic = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
a = pd.Series(dic)
print(a)

Python——pandas模块—Series数据结构_第6张图片

Series.head()从前访问

默认访问前5个元素

print(a.head(2))

Series.tail()从后访问

默认访问后5个元素

print(a.tail(2))

Sreies.index查看索引列

print(a.index)

Sreies.values查看数据列

print(a.values)

在这里插入图片描述

Series.dtype查看数据类型

print(a.dtype)

Series的使用

使用一个Series创建另一个Series

上面我们创建了一个Series对象a
接下来,我们用a创建另一个Series对象

'''字典构建Serise实例'''
dic = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
a = pd.Series(dic)
b = pd.Series(a,index=['California','Ohio','Oregon','Texas'])
print('通过一个对象构建的Series对象:')
print(b)

创建的时候,新的对象的索引列为传入的index
样板对象有的index直接取其value
样板对象没有的index,添加进去,value值设为缺失值NaN
Python——pandas模块—Series数据结构_第7张图片

缺失值检测

返回的是一个 数据列为bool型的对象
True:缺失值
False:不是缺失值

#缺失值检测
print('缺失值检测')
print(pd.isnull(b))

Python——pandas模块—Series数据结构_第8张图片

非缺失值检测

pd.notnull(Series)

练习

生成一个和sd长度相同的随机数Series
sd = pd.Series([1,2,3,4,5])

sd = pd.Series([1,2,4,1,2])
#生成一个与sd长度相同的随机数数列
a = np.random.random(len(sd))
#用数组创建Series对象
s = pd.Series(a)
print('创建的Series对象:')
print(s)

Python——pandas模块—Series数据结构_第9张图片

查找Series(索引)

[索引名]

当有相同索引名时,返回多条数据
再次验证了,Series对象中索引的名字不唯一,可以重复出现

#Series[索引名]
import pandas as pd
obj = pd.Series([1,2,3,4],index=['d','f','d','c'])
print('创建的Series:')
print(obj)
obj2 = obj['d']
print('查找索引为d的数据:')
print(obj2)

Python——pandas模块—Series数据结构_第10张图片

[索引位置下标]

下标的取值范围:[o,len(Series.values)]
可以是:
整数:正取,从0开始
负数:倒取,从-1开始

# [索引位置下标]
import pandas as pd
obj = pd.Series([1,2,3,4],index=['d','f','d','c'])
print('索引1的数据:',obj[1])
print('索引最后一个的数据:',obj[-1])

Python——pandas模块—Series数据结构_第11张图片

切片操作

类似Numpy的ndarray切片操作
不同的是,Series切片中的数据除了索引号,还可以是索引值
注意:
当使用索引值进行切片时,索引列里的索引值要唯一,除非切片的起始值为唯一索引

索引位置切片 [索引位置:索引位置:步长]

#索引位置切片
import pandas as pd
obj = pd.Series([1,2,3,4],index=['d','f','d','c'])
print(obj[1:3])

Python——pandas模块—Series数据结构_第12张图片

索引值切片[索引值:索引值]

当使用索引值进行切片时,索引列里的索引值要唯一,除非切片的起始值为唯一索引

#索引位置切片
import pandas as pd
obj = pd.Series([1,2,3,4],index=['d','f','d','c'])
print(obj['f':'c']

Python——pandas模块—Series数据结构_第13张图片
切片起始索引为不唯一索引时

import pandas as pd
obj = pd.Series([1,2,3,4],index=['d','f','d','c'])
print(obj['d':'c']

Python——pandas模块—Series数据结构_第14张图片

索引列重新赋值

import pandas as pd
obj = pd.Series([1,2,3,4],index=['d','f','d','c'])
obj.index = ['one','two','three','four']
print(obj)

此方法只能对index进行修改,不可以对values进行修改
Python——pandas模块—Series数据结构_第15张图片

Series的运算

Series保留了Numpy中的数组运算,均可以使用
Series进行数组运算的时候,索引与值之间的映射关系不会发生改变

一个Series与数值做运算

# Series运算
import pandas as pd
obj = pd.Series([100,200,300,400],index = ['one','two','three','four'])
print('初始数组:')
print(obj)
print('+1数组:')
print(obj+1)
print('-2初始数组:')
print(obj-2)
print('*3初始数组:')
print(obj*3)
print('/2初始数组:')
print(obj/2)

Python——pandas模块—Series数据结构_第16张图片
Python——pandas模块—Series数据结构_第17张图片

两个Series运算

两个对应元素进行+ - * /,对方没有的返回index,且value=NaN

import pandas as pd
obj = pd.Series([100,200,300,400],index = ['one','two','three','four'])
obj2 = pd.Series([1,2,3],index=['a','b','one'])
print(obj+obj2)

Python——pandas模块—Series数据结构_第18张图片
当两个Series对象中的某一重复索引个数为多个
要用Series1的索引对应的value,与Series2 中重复的索引对应的value分别运算,分别返回

总结:

对Series对象进行操作时,基本上可以看成对Numpy中的ndarray进行操作
ndarray中的绝大多数操作都可以用在Series上

你可能感兴趣的:(Python—pandas模块,开发语言,python,pandas)