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

目录

  • 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)

截图如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

继承(extends)

继承[extends] 继承的好处继承的示意图继承的使用细节JVM的内存&#xff1a;继承的内存布局 继承的好处 1&#xff09;提高代码的复用性 2&#xff09;代码的扩展性和维护性提高了 继承的示意图 继承的使用细节 1&#xff09;子类继承了所有属性和方法&#xff0c;非私有的…

liunx前后端分离项目部署

文章目录 1、nginx的安装和自启动2.nginx负载均衡3.前后端项目部署-后端部署4.前后端项目部署-前端部署 1、nginx的安装和自启动 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel1.安装我们nginx所需要的依赖 wget http://nginx.org/download/nginx-1.…

线程池的常用实现及执行流程

线程池 线程池线程池接口线程池参数线程池分类动态数目线程池固定数目线程池单例线程池任务调度线程池 线程池的执行流程 线程池 线程池接口 线程池参数 1、corePoolSize&#xff1a;核心线程数&#xff0c;线程池中最少线程&#xff0c;核心线程不会被回收。 2、maximumPoo…

做接口测试的流程一般是怎么样的?UI功能6大流程、接口测试8大流程这些你真的全会了吗?

在讲接口流程测试之前&#xff0c;首先需要给大家申明下&#xff1a;接口测试对于测试人员而言&#xff0c;非常非常重要&#xff0c;懂功能测试接口测试&#xff0c;就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试&#xff0c;一般也是面试笔试必问。为方便大家更…

自定义搭建管理系统

最近使用自己搭建的脚手架写了一个简易管理系统&#xff0c;使用webpackreactantd&#xff0c;搭建脚手架参考&#xff1a; 使用Webpack5搭建项目&#xff08;react篇&#xff09;_babel-preset-react-app-CSDN博客 搭建的思路&#xff1a; 1. 基建布局&#xff0c;使用antd的…

Linux调用可执行程序:system()函数和execl函数

system()函数&#xff1a; system()函数是一个在C/C编程语言中的库函数&#xff0c;用于在操作系统中执行命令。 函数声明如下&#xff1a; int system(const char *command);该函数接受一个指向以空字符结尾的字符串的指针作为参数&#xff0c;该字符串包含要执行的命令。函…

[ai笔记12] chatGPT技术体系梳理+本质探寻

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第12篇分享&#xff01; 这周时间看了两本书&#xff0c;一本是大神斯蒂芬沃尔弗拉姆学的《这就是ChatGPT》,另外一本则是腾讯云生态解决方案高级架构师宋立恒所写的《AI制胜机器学习极简入门》&#xf…

OpenHarmony Docker移植实践

Docker简介 从操作系统诞生之日起&#xff0c;虚拟化技术就不断的演进与发展&#xff0c;结合目前云原生的发展态势&#xff0c;容器无疑是其中的重要一环。 Docker是一个开源的软件项目&#xff0c;可以在Linux操作系统上提供一层额外的抽象&#xff0c;让用户程序部署在一个…

单日收益四位数的Ai姓氏头像项目

单日收益四位数的Ai姓氏头像项目 发布时间&#xff1a;2024-02-24 00:00:00作者&#xff1a;傲战浏览&#xff1a;未知分类&#xff1a;教程网朗读&#xff1a; 最近利用AI一键生成头像的这个项目又火起来了,据说一天直播间光礼物就能收到大几千 操作起来没什么难度,一键生成 …

HarmonyOS-ArkTS卡片运行机制和相关模块

ArkTS卡片运行机制 实现原理 图1 ArkTS卡片实现原理 卡片使用方&#xff1a;显示卡片内容的宿主应用&#xff0c;控制卡片在宿主中展示的位置&#xff0c;当前仅系统应用可以作为卡片使用方。卡片提供方&#xff1a;提供卡片显示内容的应用&#xff0c;控制卡片的显示内容、…

LeetCode--代码详解 235.二叉搜索树得最近公共祖先

235.二叉搜索树得最近公共祖先 题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可…

nginx------------- 变量 日志分割 自定义图标 证书 (四)

一、高级配置 1 .1网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现&#xff0c;在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module&#xff0c;否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机…

RunnerGo五种压测模式你会配置吗?

我们在做性能测试时需要根据性能需求配置不同的压测模式如&#xff1a;阶梯模式。使用jmeter时我们需要安装插件来配置测试模式&#xff0c;为了方便用户使用&#xff0c;RunnerGo内嵌了压测模式这一选项&#xff0c;今天给大家介绍一下RunnerGo的几种压测模式和怎么根据性能需…

使用GPT生成python图表

首先&#xff0c;生成一脚本&#xff0c;读取到所需的excel表格 import xlrddata xlrd.open_workbook(xxxx.xls) # 打开xls文件 table data.sheet_by_index(0) # 通过索引获取表格# 初始化奖项字典 awards_dict {"一等奖": 0,"二等奖": 0,"三等…

针对无法确定连接参数的网口通讯PLC采集方案

年前碰到了一个需求&#xff0c; 需要针对倍福PLC进行数据采集&#xff0c; 搞定了PLC通讯协议后&#xff0c; 最大的问题出现了&#xff0c; 我们不知道PLC的密码&#xff0c; 没办法进入到PLC查询到点位&#xff0c; 而且也没办法对PLC设置路由&#xff0c; 导致没有办法连上…

软件开发的艺术与科学

随着科技的飞速发展&#xff0c;软件开发已成为当今社会不可或缺的一部分。从智能手机应用程序到企业级管理系统&#xff0c;软件开发已经渗透到我们生活的方方面面。本文将探讨软件开发的重要性和现状&#xff0c;以及开发过程中涉及的关键环节和常见问题。 一、软件开发的重…

外包干了3个月,技术倒退1年。。。

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

海豚调度DolphinScheduler入门学习

DS简介&#xff1a; DolphinScheduler 是一款分布式的、易扩展的、高可用的数据处理平台&#xff0c;主要包含调度中心、元数据管理、任务编排、任务调度、任务执行和告警等模块。其技术架构基于 Spring Boot 和 Spring Cloud 技术栈&#xff0c;采用了分布式锁、分布式任务队列…

【Vuforia+Unity】AR04-地面、桌面平面识别功能(Ground Plane Target)

不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功地创建你自己的AR应用。 官方教程Ground Plane in Unity | Vuforia Library 这个功能很棒,但是要求也很不友好,只能支持部分移动设备,具体清单如下: 01.Vuforia的地面识别功能仅支持的设备清单: Recommended…

无刷电机的关键参数

不同值的参考电压的产生方法&#xff1a; BLDC&PMSM: 无刷电机也可以分为直流无刷电机和交流无刷电机。两者的主要区别在于电源类型和控制方式。直流无刷电机通常采用方波控制&#xff0c;也称为六步控制。这种控制方式下&#xff0c;电机的相电流波形接近方波。控制算法相…