详细分析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 ** 2print("\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 + 10scores_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://xiahunao.cn/news/2807399.html

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

相关文章

Python语言基础与应用-北京大学-陈斌-P29-28-计算和控制流:控制流:上机:基本计算程序-给定一个英文数字字符串,打印相应阿拉伯数字字符串-上机代码

Python语言基础与应用-北京大学-陈斌 P29-28-计算和控制流&#xff1a;控制流&#xff1a;上机&#xff1a;基本计算程序-给定一个英文数字字符串&#xff0c;打印相应阿拉伯数字字符-上机代码 # 给定一个英文数字字符串&#xff0c;打印相应阿拉伯数字字符串 # 自定义一个变量…

SpringBoot -【SmartInitializingSingleton】基础使用及应用场景

SmartInitializingSingleton 在继续深入探讨 SmartInitializingSingleton接口之前&#xff0c;让我们先了解一下 Spring Framework 的基本概念和背景。Spring Framework 是一个开源的 JavaEE&#xff08;Java Enterprise Edition&#xff09;全栈&#xff08;full-stack&#x…

Java+Vue:宠物猫认养系统的未来之路

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Windows安装HBuilderX

下载 HBuilderX下载地址: 下载地址 解压安装包 HBuilderX&#xff0c;Windows为zip包&#xff0c;解压后才能使用。 首先&#xff0c;选中下载的zip包&#xff0c;点击右键菜单&#xff0c;点击解压到当前文件夹进入解压后的文件夹&#xff0c;找到HBuilderX.exe&#xff0…

第九篇【传奇开心果系列】python文本和语音相互转换库技术点案例示例:SpeechRecognitio库开发会议记录和转录工具经典案例

传奇开心果博文系列 系列博文目录python文本和语音相互转换库技术点案例示例系列 博文目录前言一、雏形示例代码二、扩展思路介绍三、SpeechRecognition库多种语音识别引擎支持示例代码四、SpeechRecognition库实时语音转录示例代码五、SpeechRecognitio库转录文本中提取关键词…

[electron]官方示例解析

官方例子 github链接 main.js const { app, BrowserWindow } require(electron)说句实话这里的语法是有部分看不懂的。导入模块虽然electron有很多模块。但是这里只是用到了app 和 BrowserWindow function createWindow () {// Create the browser window.const mainWindo…

YOLOv9来咧!

文章目录 论文:主要内容一、提出使用PGI&#xff08;Programmable Gradient Information&#xff0c;可编程梯度信息&#xff09;来解决信息瓶颈问题和深度监督机制不适合轻量级神经网络的问题。二、设计了GELAN&#xff08;Generalized ELAN &#xff0c;广义ELAN&#xff09;…

推荐几款.NET开发最常用的windowns利器

概述 有很多好用的开发工具&#xff0c;合理的利用能够很大的提升我们日常的开发效率&#xff0c;今天小编就介绍几款我在开发中使用频率较高的windowns工具&#xff0c;希望能对大家用帮助&#xff01; 工具一:Beyond Compare Beyond Compare 是一款专业的文件对比工具&#x…

C# OpenVINO PaddleSeg实时人像抠图PP-MattingV2

目录 效果 项目 代码 下载 C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Security.Cryptography; using System.Text; us…

机器学习模型的过拟合与欠拟合

机器学习模型的训练过程中&#xff0c;可能会出现3种情况&#xff1a;模型欠拟合、模型正常拟合与模型过拟合。其中模型欠拟合与模型过拟合都是不好的情况。下面将会从不同的角度介绍如何判断模型属于哪种拟合情况。 &#xff08;1&#xff09;欠拟合与过拟合表现方式 欠拟合…

力扣细节题:翻转二叉树

细节一&#xff1a;递归采用前序递归 细节二&#xff1a;采用交换节点而不是交换数据因为左右树交换的同时左右树的所有子节点都要交换 细节三&#xff1a;采用外置函数因为return如果在本函数内操作会存在必须返回空指针的问题 /*** Definition for a binary tree node.* s…

3d Slicer软件一种新的体绘制方式

vtk Multi-Volumne试验性体绘制方式&#xff0c;细节更丰富&#xff0c;影像更清晰&#xff0c;值得学习使用

HarmonyOS创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中&#xff0c;创建ArkTS卡片&#xff0c;具体操作方式如下。 创建卡片。 根据实际业务场景&#xff0c;选择一个卡片模板。 在选择卡片的开发语言类型&#xff08;Language&#xff09;时&#xff0c;选择ArkTS选项&#xff0c;然后单…

LeetCode 热题 100 | 二叉树(一)

目录 1 基础知识 1.1 先序遍历 1.2 中序遍历 1.3 后序遍历 2 94. 二叉树的中序遍历 3 104. 二叉树的最大深度 4 226. 翻转二叉树 5 101. 对称二叉树 菜鸟做题&#xff0c;语言是 C 1 基础知识 二叉树常见的遍历方式有&#xff1a; 先序遍历中序遍历后序遍历…

K线实战分析系列之二:伞形线

K线实战分析系列之二&#xff1a;伞形线 一、伞形线二、锤子线三、上吊线四、锤子线和上吊线的特征 一、伞形线 可以是看涨信号&#xff0c;也可以是看跌信号&#xff0c;具体要看它处于趋势的哪个位置 二、锤子线 出现在下行趋势中就叫锤子线锤子线是阳线看涨意义更大一点市…

免费的WP模板网站推荐

免费wordpress模板下载 高端大气上档次的免费wordpress主题&#xff0c;首页大图全屏显示经典风格的wordpress主题。 https://www.wpniu.com/themes/289.html wordpress免费企业主题 深蓝色经典实用的wordpress网站模板&#xff0c;用wordpress免费企业主题搭建网站。 http…

vue3获取环境变量import.meta.env

vitevue的时候环境变量的获取方式变成如下&#xff1a; console.log(import.meta.env)

Java之线程同步、synchronized用法及原理

线程的同步 场景1&#xff1a;两个线程同时访问一个变量&#xff0c;一个线程自增&#xff0c;一个线程自减 public class thread11 {public static void main(String[] args) throws InterruptedException {Thread thread1 new AddThread();Thread thread2 new DecThread(…

java数据结构与算法刷题-----LeetCode654. 最大二叉树

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 法一&#xff1a;单调栈2. 法二&#xff1a;递归 1. 法一&…

读人工不智能:计算机如何误解世界笔记02_Hello,world

1. Hello&#xff0c;world 1.1. “Hello&#xff0c;world”是布赖恩克尼汉和丹尼斯里奇于1978年出版的经典著作《C程序设计语言》中的第一个编程项目 1.2. 贝尔实验室可以说是现代计算机科学界中的智库&#xff0c;地位好比巧克力界的好时巧克力 1.3. 计算机科学界的大量创…