Pandas.Series.clip() 修剪数值范围 详解 含代码 含测试数据集 随Pandas版本持续更新

news2024/11/16 4:34:05

关于Pandas版本: 本文基于 pandas2.2.0 编写。

关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。

传送门: Pandas API参考目录

传送门: Pandas 版本更新及新特性

传送门: Pandas 由浅入深系列教程

本节目录

  • Pandas.Series.clip()
    • 语法:
    • 返回值:
    • 参数说明:
      • lower 最小边界
      • upper 最大边界
      • axis 指定修剪方向(行或列)
      • inplace 原地修改正
    • 相关方法:
    • 示例:
      • 例1:小于最小边界的数据值,修剪为边界值
      • 例2:传递 `array-like` 的各种注意事项
      • 例3: `lower` 参数可以和 `upper` 参数一起使用
      • 例4:在原数据里直接修剪

Pandas.Series.clip()

Pandas.Series.clip 根据指定的边界,修剪数据的最大最小范围。

  • 若指定了最小边界 lower ,沿轴数据中比 lower 小的值,会被替换为 lower
  • 若指定了最大边界 upper ,沿轴数据中比 upper 大的值,会被替换为 upper

语法:

Series.clip(lower=None, upper=None, *, axis=None, inplace=False, **kwargs)

返回值:

  • Series or Series or None

    • 返回类型与调用者一致,若 inplace=True 则返回 None

参数说明:

lower 最小边界

  • lower : float or array-like, default None >

    lower 参数,用于指定数据的最小边界,数据中比 lower 小的值,会被替换为 lower,默认 lower=None 表示不限制最小边界:

    lower 参数可以和 upper 参数一起使用。 例3

    • float: 指定一个浮点数(整数也行),作为最小边界。例1
    • array-like: 指定一个 array-like 作为最小边界。这可以做到按指定位置修剪。

      ⚠️ 注意 :

      传递 array-like 后的工作原理:

      如果传递 array-like , Series 里的数值,和边界比较大小的过程,是逐个元素进行的:

      1. Series 里的第1个元素,和 array-like 里的第1个元素比较;
      2. Series 里的第2个元素,和 array-like 里的第2个元素比较;
      3. 直到所有元素比较完成。

      传递 array-like 的注意事项:

      1. 📌 在未来版本中,Series.clip 不再自行推断数据类型,如果准备修剪的数据不是 浮点数float,并且你在lowerupper参数中传递了array-like

        1. 你会收到最多两条 FutureWarning,但是在当前版本并不影响程序运行。 其一来自 不是浮点数类型 Series,另一个会来自你传递给lowerupper 参数的 包含了pd.NAarray-like! 需要注意的是,np.NaNpd.NA 的区别。例2-1
        2. 如果你无法忍受这个提示,推荐方法是,把Series需要修剪的数据,使用astype 转为 浮点数float。并使用 np.NaN 作为缺失值,而不是 pd.NA例2-2
      2. array-like 如果有缺失值, 此缺失值,对应的Series里的数值,将不会被修剪。例2-3

      3. array-like 的长度,必须和 Series 的行列(依 axis 参数指定)等长,否则报错 ValueError

      4. 原理上 array-like 包含 list ,但是如果涉及到计算,则必须使用能支持缺失值的结构,比如 ndarraySeries 等。建议是直接转为 Series,再用于修剪,因为即使你不转换,pandas也会自行转换为Series例2-4

      传递 array-like 的意义:

      1. 通过 传递 array-like 可以实现 Series 每一个元素,都有自己的 专属边界 ,做到按位置精准修剪。
      2. 通过 传递 array-like 可以实现 Series 某个位置的数值不被修剪(该数值在array-like里,对应 NaN,即可以不被修剪)

upper 最大边界

  • upper : float or array-like, default None

    upper 参数,用于指定数据的最大边界,沿轴数据中比 upper 大的值,会被替换为 upper,默认 upper=None 表示不限制最大边界:

    upper 参数可以和 lower 参数一起使用。 例3

    • float: 指定一个浮点数(整数也行),作为最小边界
    • array-like: 指定一个 array-like 作为最大边界。这可以做到按指定位置修剪。

      ⚠️ 注意 :

      注意内容,与 lower 参数的注意内容一致。

axis 指定修剪方向(行或列)

  • axis : {0 or ‘index’, 1 or ‘columns’}, default 0

    axis 参数,对于 Series 无效。

inplace 原地修改正

  • inplace : bool, default False 例4

    inplace : 用于控制是否原地修改(在原 Series 直接修剪数据),默认 inplace=False

    • False 不原地修改,会生成原 Series 的视图。
    • True 原地修改(在原 Series 直接修剪数据),使修剪直接在原数据里生效。

相关方法:

➡️ 相关方法


  • DataFrame.clip

    修剪

示例:

测试文件下载:

本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。

若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。

测试文件下载位置.png

测试文件下载位置

例1:小于最小边界的数据值,修剪为边界值

例1-1 构建演示数据

import pandas as pd

data = [9, -3, 0, -1, 5]
s = pd.Series(data)

s
0    9
1   -3
2    0
3   -1
4    5
dtype: int64

例1-2 指定最小边界为 -1 ,则小于 -1 的数据值,都会被替换为 -1

s = s.clip(-1)  # 等效于s.clip(lower=-1)
s
0    9
1   -1
2    0
3   -1
4    5
dtype: int64

例2:传递 array-like 的各种注意事项


例2-1 如果准备修剪的数据不是 浮点数float,并且你在lowerupper参数中传递了array-like则会收到版本提示 FutureWarning

import numpy as np
import pandas as pd

s2 = pd.Series({"第1列": [-5, -4, 0, 4, 5]})

list_for_clip = [-2, np.Na, 0, 1, 2]

s2 = s2.clip(list_for_clip)  # 等效于s2.clip(lower=list_for_clip)
s2
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

Cell In[14], line 6
      2 import pandas as pd
      4 s2 = pd.Series({"第1列": [-5, -4, 0, 4, 5]})
----> 6 list_for_clip = [-2, np.Na, 0, 1, 2]
      8 s2 = s2.clip(list_for_clip)  # 等效于s2.clip(lower=list_for_clip)
      9 s2


File D:\ProgramData\miniconda3\envs\python3.12\Lib\site-packages\numpy\__init__.py:347, in __getattr__(attr)
    344     "Removed in NumPy 1.25.0"
    345     raise RuntimeError("Tester was removed in NumPy 1.25.")
--> 347 raise AttributeError("module {!r} has no attribute "
    348                      "{!r}".format(__name__, attr))


AttributeError: module 'numpy' has no attribute 'Na'


例2-2 转换 Series 数据类型为 float,并使用 np.NaN 作为缺失值,就不会有版本提示了。

import numpy as np
import pandas as pd

s3 = pd.Series([-5, -4, 0, 4, 5]).astype(float)

list_for_clip = [-2, np.NaN, 0, 1, 2]

s3 = s3.clip(list_for_clip)  # 等效于s43.clip(lower=list_for_clip)
s3
0   -2.0
1   -4.0
2    0.0
3    4.0
4    5.0
dtype: float64


例2-3 如果 array-like 包含缺失值,那么其在 Series 中对应的元素,不会被修剪。例如,我不想 Series 的 -4 被修剪,可以把array-like的对应位置指定为缺失值。

import numpy as np
import pandas as pd

s4 = pd.Series([-5, -4, 0, 4, 5]).astype(float)

list_for_clip = [-2, np.NaN, 0, 1, 2]

s4 = s4.clip(list_for_clip)  # 等效于s4.clip(lower=list_for_clip)
s4
0   -2.0
1   -4.0
2    0.0
3    4.0
4    5.0
dtype: float64


例2-4 如果涉及到计算,则必须使用能支持缺失值的结构,比如 ndarraySeries 等。

import numpy as np
import pandas as pd

s5 = pd.Series([-5, -4, 0, 4, 5]).astype(float)

list_for_clip = pd.Series([-2, np.NaN, 0, 1, 2])

s5 = s5.clip(list_for_clip + 1)  # 等效于s5.clip(lower=list_for_clip +1 )
s5
0   -1.0
1   -4.0
2    1.0
3    4.0
4    5.0
dtype: float64

例3: lower 参数可以和 upper 参数一起使用

import numpy as np
import pandas as pd

s7 = pd.Series([-5, -4, 0, 4, 5]).astype(float)

list_for_clip = pd.Series([-2, np.NaN, 0, 1, 2])

s7 = s7.clip(list_for_clip, list_for_clip + 1, axis=0)  # 等效于s7.clip(lower=list_for_clip,upper=list_for_clip + 1, axis=0)
s7
0   -2.0
1   -4.0
2    0.0
3    2.0
4    3.0
dtype: float64

例4:在原数据里直接修剪

import numpy as np
import pandas as pd

s8 = pd.Series([-5, -4, 0, 4, 5]).astype(float)

list_for_clip1 = pd.Series([-2, np.NaN, 0, 1, 2])

s8.clip(list_for_clip1, inplace=True, axis=0)  # 等效于s8.clip(lower=list_for_clip1, inplace=True, axis=0)

s8
0   -2.0
1   -4.0
2    0.0
3    4.0
4    5.0
dtype: float64

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

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

相关文章

前端JavaScript篇之map和Object的区别、map和weakMap的区别

目录 map和Object的区别map和weakMap的区别 map和Object的区别 Object是JavaScript的内置对象,用于存储键值对。Object的键必须是字符串或符号,值可以是任意类型。Map是ES6引入的新数据结构,用于存储键值对。Map的键可以是任意类型&#xff…

高中数学两面角习题练习1

用到的定理 2 第1问证明: 第2问用到的知识和例子: 二面角锐角钝角判断的快速技巧 https://www.bilibili.com/video/BV13P41157K1/?spm_id_from333.788.recommend_more_video.0&vd_source91b03ee59c462b7b3cfbd57346cf1001 叉乘的几何意义及应用 …

day39 不同路径 不同路径Ⅱ

题目1:62 不同路径 题目链接:62 不同路径 题意 机器人位于m*n网格的左上角每次只能向下或向右移动一步,到达网格的右下角,返回不同路径的数量 动态规划 动规五部曲 1)dp数组及下标i的含义 dp[i][j]:到达(i,j)有…

2024年 复习 HTML5+CSS3+移动web 笔记 之CSS遍 第5天

第 五 天 整个网站例 5.1 准备工作 项目目录与版心 base.css 5.2 网页制作思路 5.3 header 区域-整体布局 5.4 header区域-logo 5.5 header区域-导航 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&l…

代码随想录算法训练营29期Day41|LeetCode 343,96

文档讲解&#xff1a;整数拆分 不同的二叉搜索树 343.整数拆分 题目链接&#xff1a;https://leetcode.cn/problems/integer-break/description/ 思路&#xff1a; 题目要求我们拆分n&#xff0c;拆成k个数使其乘积和最大&#xff0c;然而题目中并没有给出k&#xff0c;所以…

[python]基于opencv实现的车道线检测

【检测原理】 一、首先进行canny边缘检测&#xff0c;为获取车道线边缘做准备 二、进行ROI提取获取确切的车道线边缘&#xff08;红色线内部&#xff09; 三、利用概率霍夫变换获取直线&#xff0c;并将斜率正数和复数的线段给分割开来 四、离群值过滤&#xff0c;剔除斜率…

uniapp 高德地图显示

1. uniapp 高德地图显示 使用前需到**高德开放平台&#xff08;https://lbs.amap.com/&#xff09;**创建应用并申请Key   登录 高德开放平台&#xff0c;进入“控制台”&#xff0c;如果没有注册账号请先根据页面提示注册账号   打开 “应用管理” -> “我的应用”页面…

Springboot集成Camunda并完成一条流程实例

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;设计流程定…

028 方法的重载

方法重载的定义 使用案例 public static void main(String[] args) {// 匹配到max(int a, int b)System.out.println(max(1, 3));// 匹配到max(double a, double b)System.out.println(max(1L, 3L));// 匹配到max(double a, double b, double c, double d)&#xff0c;int自动…

SQL 函数(十二)

SQL 函数&#xff08;十二&#xff09; 一、函数分类 1.1 单行函数 单行函数仅对单个行进行运算&#xff0c;并且每行返回一个结果。 常见的函数类型&#xff1a; 字符、数字、日期、转换 1.2 多行函数 多行函数能够操纵成组的行&#xff0c;每个行组给出一个结果&#x…

【拜年神器】AI写真保姆级教程

1. 介绍 废话不说&#xff0c;先上图看效果 功能简介 上传几张自己的照片&#xff0c;训练之后&#xff0c;就能生成各种风格的AI写真照&#xff0c;主要有无限风格写真、固定模板写真、AI虚拟试衣、人物说话视频四个类别 无限风格写真 固定模板写真 证件照 工作照 婚纱…

k8s中cert-manager管理https证书

前言 目前https是刚需,但证书又很贵,虽然阿里云有免费的,但没有泛域名证书,每有一个子域名就要申请一个证书,有效期1年,1年一到全都的更换,太麻烦了。经过搜索,发现了自动更新证书神器cert-manager;当然cert-manager是基于k8s的。 安装采用Helm方式 Chart地址: ht…

萝卜视频源码前后端带视频演示

萝卜影视源码前端是用JAVA开发的全原生APP源码&#xff0c;后端用的是二次开发的苹果CMS&#xff0c;支持局域网投屏&#xff0c;视频软解硬解&#xff0c;播放器自带弹幕功能。支持解析官方视频&#xff0c;支持M3U8&#xff0c;MP4。 开屏广告&#xff0c;全局广告&#xff0…

lava学习-接口

接口-Interface 1.什么是接口&#xff1f; 例&#xff1a;构造器&#xff0c;代码块在接口中统统没有&#xff0c;也不能创建对象 构造器的使用-----实现类 例&#xff1a;下图中的B类就是一个 实现类 2.接口的好处 继承只能单继承&#xff0c;而接口可以弥补类单继承的不足&am…

iPad“粘贴自”字样不消失解决办法

iPad“粘贴自”字样不消失解决办法 好无语&#xff0c;写论文主要就靠iPad看资料&#xff0c;复制粘帖的时候卡死搞得我无敌焦躁&#xff0c;问了&#x1f34e;支持的客服才解决&#xff0c;方法如下&#xff1a;1.音量上键按一下 2.音量下键按一下 3.一直按开关机键直到出现苹…

备战蓝桥杯---搜索(应用入门)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们可以用BFS&#xff0c;其中&#xff0c;对于判重操作&#xff0c;我们可以把这矩阵化成字符串的形式再用map去存&#xff0c;用a数组去重现字符串&#xff08;相当于map映射的反向操作&#xff09;。移动空格先找…

Nicn的刷题日常之打印水仙花数

目录 1.题目描述 2.解题思路 3.解题 1.题目描述 求出0&#xff5e;100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和确好等于该数本身&#xff0c;如:153&#xff1d;1^3&#xff0b;5^3&#xff0b;3^3&#xff0c;则1…

使用C#读取PDF中所有文本内容

先安装如下包 using iTextSharp.text.pdf; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text;namespace ReadPdfText {class Program{static void Main(string[] args){string path "0017_审判流程管理信息表2…

HDMI2.1之eARC简介-Dolby Atmos和DTS:X

文章目录 eARC目的更大的带宽更高质量音频支持对象型音频与CEC&#xff08;Consumer Electronics Control&#xff09;的兼容性&#xff1a; 适应流媒体发展Dolby AtmosDTS:X高分辨率音频更高的音频位深度和采样率低延迟音频 对象型音频格式独立对象三维定位动态音场适应性和灵…

【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)

手把手零基础带你玩转大数据流式处理引擎Flink&#xff08;运行机制原理加深&#xff09; 前提介绍运行Flink应用运行机制Flink的两大核心组件JobManagerTaskManagerTaskSlot Flink分层架构Stateful Stream ProcessingDataStream和DataSetDataStream&#xff08;数据流&#xf…