当前位置: 首页 > news >正文

Pandas Series对象创建,属性,索引及运算详解

目录

Series对象创建

实例化参数

index参数

选用array-like创建Series对象

list

ndarray

显示索引与隐式索引

选用dict创建Series对象

不指定索引

指定索引

选用标量创建Series对象

使用标量创建的广播机制

Series属性

name

size

shape

index

values

Series索引取值

Series对象[索引名]及Series对象.索引名

Series对象.iloc[]

索引取值后修改

Series数值运算

广播机制演示

使用Numpy运算函数


Series对象创建

实例化参数

def __init__(self,data=None,index=None,dtype: Dtype | None = None,name=None,copy: bool | None = None,fastpath: bool | lib.NoDefault = lib.no_default,
) -> None:

其中data为穿入的数据,数据类型一般为array-like,也可以穿入自建类型数据,index参数为Series对象的索引,也可称作为标签,dtype为单位元素数据类型的指定,name为Series对象的名称,如将Series对象导入DataFrame中,name将默认作为列名存在

index参数

Series对象实际是具有字典属性的array-like数据类型,原因在于Series对象为一维数据,在DataFrame二维表中,每一列或行单独取出都为一个Series参数,若取行,则列名则为Series对象的index,反之若取列,则行索引为index

index可分为隐式索引和显示索引

隐式索引为常规从0开始至长度-1的index

显示索引可以手动设置index,index列表中的每一项按序作为对应元素的索引

选用array-like创建Series对象

这里选用list及ndarray作为data参数传入演示及区别详解

list

选用list对象作为数据传入Series对象进行实例化的时候,创建的为副本对象,也就是说Series与list并不共享内存

import numpy as np
import pandas as pddata1 = pd.Series(data=[1,2,3])
print(data1)
# 0    1
# 1    2
# 2    3
# dtype: int64
ndarray

使用ndarray对象作为数据传入Series对象进行实例化的时候,创建的为一个与原ndarray共享内存的Series对象

import numpy as np
import pandas as pdarr = np.array([1,2,3])
data1 = pd.Series(data=arr)
print(data1)
arr[1] = 100
print(data1)
# 0    1
# 1    2
# 2    3
# dtype: int32
# 0      1
# 1    100
# 2      3
# dtype: int32

可以看到在进行原ndarray的修改后Series对象也发生了改变,这里可以使用.copy()来进行深拷贝

import numpy as np
import pandas as pdarr = np.array([1,2,3])
data1 = pd.Series(data=arr.copy())
print(data1)
arr[1] = 100
print(data1)
# 0    1
# 1    2
# 2    3
# dtype: int32
# 0    1
# 1    2
# 2    3
# dtype: int32

显示索引与隐式索引

上述的例子都为隐式索引,即不指定索引,自动生成的从0-len-1的数值索引为隐式索引,接下来进行显示索引的指定

import numpy as np
import pandas as pdarr = ['Jack','Male']
arr1 = ['Name','Gender']
data1 = pd.Series(data=arr,index=arr1)
print(data1)
# Name      Jack
# Gender    Male
# dtype: object

可以看到这里的dtype变为了object类型,原因为data的属性为字符串

选用dict创建Series对象

使用dict对象创建Series对象,只需要将data赋值为dict,索引会自动选用键,如果要自定义显式索引的话,则会根据显示索引匹配字典的键,如果有匹配不成功的则会使用pd.NA,也就是空值进行填充

不指定索引
import numpy as np
import pandas as pddict1 = {'Name':'Jack','Gender':'Male'}
data1 = pd.Series(data=dict1)
print(data1)
# Name      Jack
# Gender    Male
# dtype: object
指定索引
import numpy as np
import pandas as pddict1 = {'Name':'Jack','Gender':'Male'}
data1 = pd.Series(data=dict1,index=['Name','Hobby'])
print(data1)
# Name     Jack
# Hobby     NaN
# dtype: object

这里指定了一个在字典中的键不存在的索引Hobby,因为在字典中并不存在,所以这里显示的值为pd.NA

选用标量创建Series对象

若使用标量创建Series对象,则会默认生成一个长度为1的Series对象

import numpy as np
import pandas as pddata1 = pd.Series(data=1)
print(data1)
print(data1.shape)
# 0    1
# dtype: int64
# (1,)
使用标量创建的广播机制

如果想用标量进行广播,就要指定显式索引,这样就会根据显示索引的长度对标量进行广播

import numpy as np
import pandas as pddata1 = pd.Series(data=1, index=[1,2,3,4,5,6,7])
print(data1)
print(data1.shape)
# 1    1
# 2    1
# 3    1
# 4    1
# 5    1
# 6    1
# 7    1
# dtype: int64
# (7,)

Series属性

Series属性一般包括以下几个

name

name:Series对象的名字,可以在Series创建时指定,在将Series对象转为DataFrame二维表后,name将作为列名存在,行索引为Series对象的原索引

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30}data1 = pd.Series(data=data1,name='Jack')
data2 = pd.DataFrame(data=data1)
print(data2)#              Jack
# Hobby  Basketball
# Age            30

size

size:Series对象的元素个数,也就是Series对象的长度

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30}data1 = pd.Series(data=data1,name='Jack')print(data1.size)# 2

shape

shape:Series对象的形状

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30}data1 = pd.Series(data=data1,name='Jack')print(data1.shape)# (2,)

index

index:Series对象的索引列表,但不是纯粹的列表,是经过封装的,并且不支持修改元素,所以若需要修改index的值,则需要整体替换index

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30}data1 = pd.Series(data=data1,name='Jack')print(data1.index)
data2 = list(data1.index)
data2[0]='jjj'
data1.index = data2
print(data1)# Index(['Hobby', 'Age'], dtype='object')
# jjj    Basketball
# Age            30
# Name: Jack, dtype: object

values

values:为Series对象的值列表,并且values是只读的,不像index可以进行修改,若想对值进行修改,可以使用索引取值,然后修改,详见下文

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30}data1 = pd.Series(data=data1,name='Jack')print(data1.values)
# ['Basketball' 30]

Series索引取值

Series对象[索引名]及Series对象.索引名

Series可以通过Series对象[索引名]进行取值,这里可以是索引名,也可以是索引列表

同样也可以通过Series对象.索引名来进行取值,但是要确保索引名和实例属性不冲突,否则会优先返回实例属性

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30,'name':'pig'}data1 = pd.Series(data=data1,name='Jack')
print(data1['Hobby'])
print(data1[['Hobby','Age']])
print(data1.Hobby)
print(data1.name)
# Basketball
# Hobby    Basketball
# Age              30
# Name: Jack, dtype: object
# Basketball
# Jack

可以看到这里返回的name为Jack,也就是Series对象的名字,而不是pig,原因是属性名和index发生了冲突,所以会优先返回实例属性,这里想要取出索引name对应的值,只能使用data1['name']

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30,'name':'pig'}data1 = pd.Series(data=data1,name='Jack')
print(data1['name'])
# pig

Series对象.iloc[]

这里使用的iloc[]索引同样适用于DataFrame(后面会更新博客讲解,请保持关注),iloc[]索引的参数为从0-len-1的数值索引,比如这里要取第2个值就为iloc[1]

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30,'name':'pig'}data1 = pd.Series(data=data1,name='Jack')
print(data1.iloc[0],data1.iloc[1])
# Basketball 30

索引取值后修改

import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30,'name':'pig'}data1 = pd.Series(data=data1,name='Jack')
print(data1.iloc[0],data1.iloc[1])
data1.iloc[0] = 'football'
print(data1)
# Basketball 30
# Hobby    football
# Age            30
# name          pig
# Name: Jack, dtype: object
import numpy as np
import pandas as pddata1 = {'Hobby':'Basketball','Age':30,'name':'pig'}data1 = pd.Series(data=data1,name='Jack')
data1['Hobby'] = 'football'
data1.Age = 18
print(data1)
# Hobby    football
# Age            18
# name          pig
# Name: Jack, dtype: object

Series数值运算

Series数值运算支持广播机制,及于numpy运算函数兼容

广播机制演示

import numpy as np
import pandas as pddata1 = pd.Series(data=np.random.randint(1,10,5))
print(data1)
print(data1+1)
# 0    3
# 1    9
# 2    9
# 3    2
# 4    8
# dtype: int32
# 0     4
# 1    10
# 2    10
# 3     3
# 4     9
# dtype: int32

使用Numpy运算函数

import numpy as np
import pandas as pddata1 = pd.Series(data=np.random.randint(1,10,5))
print(data1)
print(np.power(data1,2))
# 0    3
# 1    1
# 2    4
# 3    4
# 4    1
# dtype: int32
# 0     9
# 1     1
# 2    16
# 3    16
# 4     1
# dtype: int32

这里使用numpy中的power实现了一个乘方操作

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【系统架构设计师】软件架构的概念(经典习题)
  • 深度学习--------------序列模型
  • 17、Python如何读写文本文件
  • k8s-API 访问控制
  • AMD ThinkSystem服务器上的 Linux 和 C 状态设置 - Lenovo ThinkSystem
  • sqlgun靶场漏洞挖掘
  • 解码未来:H.265与H.266技术对比及EasyCVR视频汇聚平台编码技术优势
  • SpringBoot集成Thymeleaf模板引擎,为什么使用(详细介绍)
  • 【计算机网络】数据链路层深度解析
  • 初写MySQL四张表:(3/4)
  • 编译QT源码时的configure参数须知
  • vue使用TreeSelect设置带所有父级节点的回显
  • k8s多节点集群搭建
  • 【运维】好用的线上项目运维命令
  • Java之线程篇四
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Docker: 容器互访的三种方式
  • DOM的那些事
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Laravel核心解读--Facades
  • learning koa2.x
  • leetcode46 Permutation 排列组合
  • Next.js之基础概念(二)
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 小而合理的前端理论:rscss和rsjs
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • NLPIR智能语义技术让大数据挖掘更简单
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​用户画像从0到100的构建思路
  • ​字​节​一​面​
  • (13)Hive调优——动态分区导致的小文件问题
  • (19)夹钳(用于送货)
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)windows配置JDK环境
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)kafka实战——kafka源码编译启动
  • (转)ORM
  • ****三次握手和四次挥手
  • .NET Reactor简单使用教程
  • .Net6使用WebSocket与前端进行通信
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • ?php echo ?,?php echo Hello world!;?
  • @SpringBootApplication 包含的三个注解及其含义
  • [ linux ] linux 命令英文全称及解释