详细分析Pandas中的Series对象(附Demo)

news2025/1/17 3:13:03

目录

  • 1. 问题所示
  • 2. 基本知识
  • 3. API Demo
  • 4. 示例Demo
  • 5. 彩蛋

1. 问题所示

从实战上手基础知识
一开始遇到这个Bug:

TypeError: unsupported operand type(s) for -: 'str' and 'float'

后面经了解执行减法运算时发生了错误,其中一个操作数是字符串类型,另一个操作数是浮点数类型

例如:

x = "5"
y = 3.14
result = x - y  # 尝试对字符串和浮点数执行减法运算

要解决这个问题必须强转化某个类型!

但是转化好之后发现还是报错:TypeError: cannot convert the series to <class 'float'>

说明不能这么转化!

例如:

import pandas as pd

# 创建一个包含字符串的Series对象
s = pd.Series(['1.2', '3.4', '5.6'])

# 尝试将Series对象转换为float类型
s_float = float(s)

为了解决这个问题,先确保Series对象中的所有值都可以被转换为float类型

可以使用pd.to_numeric()函数来尝试将Series中的值转换为数值类型

示例如下:

import pandas as pd

# 创建一个包含字符串的Series对象
s = pd.Series(['1.2', '3.4', '5.6'])

# 尝试将Series对象转换为float类型
try:
    s_float = pd.to_numeric(s)
    print(s_float)
except ValueError as e:
    print("Error:", e)

截图如下:

在这里插入图片描述

以上主要是一个Demo层层递进,为了引出Series对象
实际在工作中Bug如下:

res['days'] = res['堆存期'].astype(int) - res['free'].astype(int) 
res['天数差额'] = float(res['天']) - res['days']

对应修改为:

# 将 '天' 列转换为浮点数类型
res['天'] = res['天'].astype(float)

# 执行数学运算
res['days'] = res['堆存期'].astype(int) - res['free'].astype(int)
res['天数差额'] = res['天'] - res['days']

2. 基本知识

  • Pandas 库中的一种基本数据结构,它类似于带有索引的一维数组

  • 由一组数据以及与之相关联的索引组成,可以存储不同类型的数据,并提供了许多方便的方法和功能,使数据的处理和分析变得更加简单和高效

Series 对象的作用:

  • 数据存储:Series 可以存储各种类型的数据,包括整数、浮点数、字符串、日期等
  • 数据操作:提供了丰富的方法和功能,可以对数据进行快速、灵活的操作和处理,如索引、切片、过滤、排序、聚合等
  • 数据对齐:在进行数学运算或操作时,Series 对象会根据索引自动对齐数据,确保相同索引的数据进行对应操作
  • 数据可视化:可以方便地利用 Series 对象进行数据可视化,如绘制折线图、柱状图等

3. API Demo

常用API如下:

方法具体描述
pd.Series(data, index=index)创建一个 Series 对象,其中 data 可以是列表、字典、数组等,index 是可选参数,用于指定索引
series.values返回 Series 对象的值,以 NumPy 数组形式返回
series.index返回 Series 对象的索引
series.head(n)返回 Series 对象的前 n 个值,默认为前 5 个
series.tail(n)返回 Series 对象的后 n 个值,默认为后 5 个
series.astype(dtype)将 Series 对象的数据类型转换为指定类型
series.isnull() / series.notnull()返回一个布尔型的 Series 对象,用于判断是否缺失数据
series.dropna()删除缺失数据
series.fillna(value)填充缺失数据
series.unique()返回 Series 对象中的唯一值
series.nunique()返回 Series 对象中的唯一值的数量
series.describe()返回 Series 对象的描述统计信息
series.map(func)对 Series 对象的每个元素应用指定的函数

通过Demo更好的了解其接口含义

  • pd.Series(data, index=index)

创建一个 Series 对象,其中 data 可以是列表、字典、数组等,index 是可选参数,用于指定索引

下面是通过列表创建:

import pandas as pd
import numpy as np

# pd.Series(data, index=index)
data_list = [1, 2, 3, 4, 5]
index_list = ['A', 'B', 'C', 'D', 'E']
series_from_list = pd.Series(data_list, index=index_list)
print("Series from list:")
print(series_from_list)

输出结果如下:

在这里插入图片描述

这是从一个字典中抽取,注意与上面的区别:

  • series_from_list 输出值 是从一个列表创建的,使用了指定的索引。
  • series_from_dict 输出值 是从一个字典创建的,字典的键被用作索引。
data_dict = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
series_from_dict = pd.Series(data_dict)
print("\nSeries from dictionary:")
print(series_from_dict)

输出结果如下:
(输出结果与上面一样,虽然两者都创建了类似的 Series 对象,但是数据的来源和索引的指定方式略有不同)

在这里插入图片描述

这是从一个数组中抽取:

data_array = np.array([1, 2, 3, 4, 5])
index_array = ['A', 'B', 'C', 'D', 'E']
series_from_array = pd.Series(data_array, index=index_array)
print("\nSeries from array:")
print(series_from_array)

截图如下(与上面一致):

在这里插入图片描述


以下为一些属性输出
在这里插入图片描述
在这里插入图片描述

配合其属性值输出,此时本身为数组

  • 此时强转换为list:
# series.values
print("\nValues of the series:")
print(series_from_list.values)  # 输出

截图如下:

在这里插入图片描述

  • 对应查看index索引值:
# series.index
print("\nIndex of the series:")
print(series_from_list.index)

截图如下:

在这里插入图片描述

  • 返回 Series 对象的前 n 个值:
# series.head(n)
print("\nFirst 3 elements of the series:")
print(series_from_list.head(3))

截图如下:

在这里插入图片描述

  • 返回 Series 对象的后 n 个值
# series.tail(n)
print("\nLast 3 elements of the series:")
print(series_from_list.tail(3))

截图如下:

在这里插入图片描述

  • 将 Series 对象的数据类型转换为指定类型
# series.astype(dtype)
print("\nSeries with data type converted to float:")
print(series_from_list.astype(float))

截图如下:

在这里插入图片描述

  • 返回一个布尔型的 Series 对象,用于判断是否缺失数据
# series.isnull() / series.notnull()
print("\nCheck for null values:")
print(series_from_list.isnull())
print("\nCheck for non-null values:")
print(series_from_list.notnull())

截图如下:

在这里插入图片描述

  • 删除缺失数据
# series.dropna()
series_with_nan = pd.Series([1, 2, np.nan, 4, np.nan])
print("\nSeries with NaN values:")
print(series_with_nan)
print("\nSeries with NaN values dropped:")
print(series_with_nan.dropna())

截图如下:

在这里插入图片描述

  • 填充缺失数据
# series.fillna(value)
print("\nSeries with NaN values filled with 0:")
print(series_with_nan.fillna(0))

截图如下:

在这里插入图片描述

  • 返回 Series 对象中的唯一值
# series.unique()
series_with_duplicates = pd.Series([1, 2, 2, 3, 3, 4, 4])
print("\nSeries with duplicates:")
print(series_with_duplicates)
print("\nUnique values in the series:")
print(series_with_duplicates.unique())

截图如下:

在这里插入图片描述

  • 返回 Series 对象中的唯一值的数量
# series.nunique()
print("\nNumber of unique values in the series:")
print(series_with_duplicates.nunique())

截图如下:

在这里插入图片描述

  • 返回 Series 对象的描述统计信息
# series.describe()
print("\nDescription of the series:")
print(series_with_duplicates.describe())

截图如下:

在这里插入图片描述

  • 对 Series 对象的每个元素应用指定的函数
# series.map(func)
def square(x):
    return x ** 2

print("\nSeries with each element squared:")
print(series_from_list.map(square))

截图如下:

在这里插入图片描述

4. 示例Demo

上述的API可能还有些抽象,放在实战Demo中加深印象:

import pandas as pd

# 创建学生分数的字典
student_scores = {'Alice': 85, 'Bob': 72, 'Charlie': 90, 'David': 65, 'Emily': 88}

# 创建 Series 对象
scores_series = pd.Series(student_scores)

# 输出 Series 对象
print("学生分数 Series 对象:")
print(scores_series)

# 输出 Series 对象的值和索引
print("\nSeries 对象的值:")
print(scores_series.values)
print("\nSeries 对象的索引:")
print(scores_series.index)

# 输出前两个学生的分数
print("\n前两个学生的分数:")
print(scores_series.head(2))

# 输出后两个学生的分数
print("\n后两个学生的分数:")
print(scores_series.tail(2))

# 将分数的数据类型转换为浮点数
scores_series_float = scores_series.astype(float)
print("\n转换数据类型为浮点数后的 Series 对象:")
print(scores_series_float)

# 判断是否有缺失数据
print("\n判断是否有缺失数据:")
print(scores_series.isnull())

# 输出分数不为空的学生分数
print("\n分数不为空的学生分数:")
print(scores_series.dropna())

# 填充缺失数据为0
scores_series_fillna = scores_series.fillna(0)
print("\n填充缺失数据为0后的 Series 对象:")
print(scores_series_fillna)

# 输出学生分数的描述统计信息
print("\n学生分数的描述统计信息:")
print(scores_series.describe())

# 对学生分数应用一个函数,比如加分10分
def add_bonus(score):
    return score + 10

scores_series_bonus = scores_series.map(add_bonus)
print("\n每个学生的分数加10分后的 Series 对象:")
print(scores_series_bonus)

对应的结果截图如下:

在这里插入图片描述

以及

在这里插入图片描述

5. 彩蛋

忘记补充一个知识点了,切片同样也可运用在该对象中

import pandas as pd

# 创建一个 Series 对象
data = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
index = ['A', 'B', 'C', 'D', 'E']
series = pd.Series(data, index=index)

# 输出原始的 Series 对象
print("原始的 Series 对象:")
print(series)

# 切片操作:选取索引为'B'到'D'之间的元素
sliced_series = series['B':'D']

# 输出切片后的 Series 对象
print("\n切片后的 Series 对象:")
print(sliced_series)

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1470424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文献速递:GAN医学影像合成--用生成对抗网络生成 3D TOF-MRA 体积和分割标签

文献速递&#xff1a;GAN医学影像合成–用生成对抗网络生成 3D TOF-MRA 体积和分割标签 01 文献速递介绍 深度学习算法在自然图像分析中的成功近年来已被应用于医学成像领域。深度学习方法已被用于自动化各种耗时的手动任务&#xff0c;如医学图像的分割和分类&#xff08;G…

React18源码: Fiber树的初次创建过程图文详解

fiber树构造&#xff08;初次创建&#xff09; fiber树构造的2种情况&#xff1a; 1.初次创建 在React应用首次启动时&#xff0c;界面还没有渲染此时并不会进入对比过程&#xff0c;相当于直接构造一棵全新的树 2.对比更新 React应用启动后&#xff0c;界面已经渲染如果再次发…

Java 过滤器深入了解学习

Java 过滤器深入了解学习 生活不能等待别人来安排&#xff0c;要自己去争取和奋斗&#xff1b;而不论其结果是喜是悲&#xff0c;但可以慰藉的是&#xff0c;你总不枉在这世界上活了一场。有了这样的认识&#xff0c;你就会珍重生活&#xff0c;而不会玩世不恭&#xff1b;同时…

【服务发现--service】

1、service的定义 "Service"简写"svc”。Pod不能直接提供给外网访问&#xff0c;而是应该使用service。Service就是把Pod暴露出来提供服务&#xff0c;Service才是真正的“服务”&#xff0c;它的中文名就叫“服务”。可以说Service是一个应用服务的抽象&#…

【软考中级】系统集成项目管理工程师—导学

软考中级——系统集成项目管理工程师 原视频链接&#xff1a;2024年05月【持续更新】最新系统集成项目管理工程师培训课程-网络课程-软考中级培训 考试介绍 基础介绍 软考全称又叫计算机技术与软件专业技师资格水平考试。 软考是国家人力资源和社会保障部、工业和信息化部…

基于SpringBoot实现的医院药品管理系统

一、系统架构 前端&#xff1a;html | layui | js | css 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.6 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 药品库存管理-登记出入口信息 03. 药品库存管理-问题药品信息 …

【机器学习科学库】全md文档笔记:Jupyter Notebook和Matplotlib使用(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论人工智能相关知识。主要内容包括&#xff0c;了解机器学习定义以及应用场景&#xff0c;掌握机器学习基础环境的安装和使用&#xff0c;掌握利用常用的科学计算库对数据进行展示、分析&#xff0c;学会使用jupyter note…

字符串(算法竞赛)--Manacher(马拉车)算法

1、B站视频链接&#xff1a;F05 Manacher(马拉车)_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】manacher - 洛谷 ​ #include <bits/stdc.h> using namespace std; const int N3e7; char a[N],s[N]; int d[N];//回文半径函数void get_d(char*s,int n){d[1]1;for(int…

SpringBoot:数据访问-整合 Druid 配置数据源监控

点击查看数据访问demo&#xff1a;LearnSpringBoot06DataJdbc 点击查看更多的SpringBoot教程 简介 Druid Spring Boot Starter 用于帮助你在Spring Boot项目中轻松集成Druid数据库连接池和监控。 一、添加druid-spring-boot-starter依赖 点击查询最新版 <dependency&g…

猜字谜|构建生成式 AI 应用实践(一)

在 2023 亚马逊云科技 re:Invent 之后&#xff0c;细心的开发者们也许已经发现有一个很有趣的动手实验&#xff1a;开发一款可部署的基于大语言模型的字谜游戏&#xff1a; 该款游戏使用了文生图模型为玩家提供一个未知的提示词&#xff0c;玩家需要根据模型生成的图像来猜测该…

【基于Ubuntu20.04的Autoware.universe安装过程】方案二:双系统 | 详细记录 | 全过程图文 by.Akaxi

目录 一、Autoware.universe背景 Part-1&#xff1a;安装双系统教程 二、查看Windows引导方式 三、制作安装盘 四、设置电脑配置 1.关闭bitlocker 2.压缩硬盘分区 3.关闭Secure Boot 4.关闭intel RST 5.BIOS设置U盘引导 五、安装Ubuntu20.04 1.ventoy引导 2.安装配…

代码随想录算法训练营Day27 || leetCode 93.复原IP地址 || 78.子集 || 90.子集II

93.复原IP地址 与分割回文串的代码相近&#xff0c;先写出判断函数&#xff0c;之后以判断结果为标准&#xff0c;执行回溯的代码。此题中使用点的个数来决定回溯的终止&#xff0c;需要学习一下。 class Solution { private:vector<string> result;bool isValid(const …

c语言经典测试题5

1.题1 t0; while(printf("*")) { t; if (t<3) break; }关于上述代码描述正确的是&#xff1f; A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与0等价 C: 其中循环控制表达式是不合法的 D: 以上说法都不对 我们来分析一下&#xff1a;printf的返回值…

一个具有强大PDF处理能力的.Net开源项目

PDF具有跨平台、可读性强、不可修改性、无需特定阅读软件、内容安全等好处&#xff0c;在工作中经常都会用到。 所以&#xff0c;我们在项目开发中&#xff0c;经常需要生成PDF的文件&#xff0c;或者把Html、Xml等文件转化为PDF格式。 今天给大家推荐一个具有PDF处理能力的.…

消息队列-RabbitMQ:延迟队列、rabbitmq 插件方式实现延迟队列、整合SpringBoot

十六、延迟队列 1、延迟队列概念 延时队列内部是有序的&#xff0c;最重要的特性就体现在它的延时属性上&#xff0c;延时队列中的元素是希望在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列。 延…

20240113----重返学习-`nginx/conf/nginx.conf`的https证书配置说明

20240113----重返学习-nginx/conf/nginx.conf的https证书配置说明 文件说明 不同域名的多虚拟主机配置 server {listen 443 ssl;#在443端口上监听SSL/TLS流量;server_name localhost;#指定服务器名称&#xff0c;应该与域名匹配;ssl_certificate fangchaoduan.com.pem;#指定SS…

数据安全之路:深入了解MySQL的行锁与表锁机制

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数据安全之路&#xff1a;深入了解MySQL的行锁与表锁机制 前言基础innodb中锁与索引的关系如何避免表锁 前言 在当今数据密集的应用中&#xff0c;数据库锁成为了确保数据一致性和并发操作的关键工具…

Java 拦截器深入了解学习

Java 拦截器深入了解学习 命运总是不如愿。 但往往是在无数的痛苦中&#xff0c;在重重的矛盾和艰难中&#xff0c;才使人成熟起来&#xff0c;坚强起来;虽然这些东西在实际感受中给人带来的并不都是欢乐。 ————路遥《平凡的世界》 什么是拦截器&#xff08;Interceptor&am…

【C++】C++对C语言的关系,拓展及命名空间的使用

文章目录 &#x1f4dd;C简述C融合了3种不同的编程方式&#xff1a;C和C语言关系是啥呢&#xff1f;C标准 &#x1f320;C应用&#x1f320;C语言优点第一个C程序 &#x1f320;命名空间&#x1f320;命名空间的使用命名空间的定义 &#x1f320;怎么使用命名空间中的内容呢&am…

强化学习入门到不想放弃-3

第三节我们主要讲一下SARSA模型 上节课的链接:强化学习入门到不想放弃-2 (qq.com) 有模型的概念:简单理解,上节课我讲的就是有模型,就是可以开上帝视角,知道全局地图 无模型的概念: 打CS,但是看不到地图的情况,全凭自己探索 今天的讲解环境还是和上节课一样,如下…