pandas教程:Techniques for Method Chaining 方法链接的技巧

文章目录

  • 12.3 Techniques for Method Chaining(方法链接的技巧)
  • 1 The pipe Method(pipe方法)

12.3 Techniques for Method Chaining(方法链接的技巧)

对序列进行转换的时候,我们会发现会创建很多再也不会用到的临时变量(temporary variable)。比如下面的例子:

df = load_data()
df2 = df[df['col2'] < 0]
df2['col1_demeaned'] = df2['col1'] - df2['col1'].mean()
result = df2.groupby('key').col1_demeaned.std()

这里我们不使用任何真实数据,这个例子说明了一些新方法。首先,DataFrame.assign方法是一个函数,它可以作为列赋值方法df[k] = v的替代品。它不会修改原有的对象,而是会返回一个带有修改标识的新DataFrame对象。所以下面两个方法是相等的:

# Usual non-functional way 
df2 = df.copy() 
df2['k'] = v# Functional assign way 
df2 = df.assign(k=v)

在原始对象上直接进行赋值比用assign会更快一些,但是assign可以使用更方便的方法链接(method chaining):

result = (df2.assign(col1_demeaned=df2.col1 - df2.col2.mean()).groupby('key').col1_demeaned.std())

需要记住的是,当使用方法链接的时候,你可能会需要引用临时对象。在之后的例子,我们不能引用load_data的结果,除非它被赋值给临时变量df. 。为了做到这一点,assign和其他一些pandas函数接受像函数一样函数参数(function-like arguments),也被称作为可调用(callables)。

为了演示callables,考虑上面例子里的一个片段:

df = load_data() 
df2 = df[df['col2'] < 0]

这句可以被写为:

df = (load_data()[lambda x: x['col2'] < 0])

在这里,load_data的结果没有赋值给参数,所以传入[]中的函数被绑定到了绑定到了在某个链接状态下的对象上(so the function passed into [] is then bound to the object at that stage of the method chain)。

我们可以把整个序列携程一行链接表达式:

result = (load_data()[lambda x: x.col2 < 0].assign(col1_demeaned=lambda x: x.col1 - x.col1.mean()).groupby('key').col1_demeaned.std())

我们可以把代码写成这种风格,但也可以分解成为步来写,这样可读性会更高。

1 The pipe Method(pipe方法)

我们可以利用pandas内建的函数和一些用callables实现的方法链接,做很多事情。不过,有时候我们想要用自己的函数或一些第三方库里的函数。这就是pipe方法出现的原因。

假设有一系列函数调用:

a = f(df, arg1=v1) 
b = g(a, v2, arg3=v3) 
c = h(b, arg4=v4)

当使用函数来接受或返回SeriesDataFrame对象的时候,我们可以把上面的利用pipe重写为:

result = (df.pipe(f, arg1=v1).pipe(g, v2, arg3=v3) .pipe(h, arg4=v4))

f(df)df.pipe(f)是一样的,但是pipe能让链接调用更简单。

pipe一个有用的模式是生成一系列可重复的函数操作。例如,考虑计算两个组的平均值的差:

g = df.groupby(['key1', 'key2']) 
df['col1'] = df['col1'] - g.transform('mean')

假设我们想要能对不止一个组进行减值,只要改变分组键(group key)即可。除此之外,我们可能想要把这种转换用方法链接的形式实现。这里有一个例子:

def group_demean(df, by, cols):result = df.copy() g = df.groupby(by) for c in cols:result[c] = df[c] - g[c].transform('mean') return result

上面的也可以写为:

result = (df[df.col1 < 0] .pipe(group_demean, ['key1', 'key2'], ['col1']))

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

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

相关文章

操作系统的中断与异常(408常考点)

为了进行核心态和用户态两种状态的切换&#xff0c;引入了中断机制。 中断是计算机系统中的一种事件&#xff0c;它会打断CPU当前正在执行的程序&#xff0c;转而执行另一个程序或者执行特定的处理程序。中断可以来自外部设备&#xff08;如键盘、鼠标、网络等&#xff09;、软…

1072 Gas Station (最短路径同时求最短路,最长路,总路径)

题意&#xff1a;给定几处居民住所与几处预选加油站点&#xff0c;求离最近的居民住所最远且所有居民都在该站点服务区内的加油站点&#xff0c;如果有多个&#xff0c;则选择平均距离最小的&#xff0c;再有多个&#xff0c;选择序号最小的。 思路&#xff1a;刚开始不知道未…

振南技术干货集:FFT 你知道?那数字相敏检波 DPSD 呢?(1)

注解目录 1 、DPSD 的基础知识 1.1 应用模型 1.2 原理推导 1.3 硬件 PSD &#xff08;相敏检波&#xff0c;就是从繁乱复杂的信号中将我们关心的信号检出来&#xff0c;同时对相位敏感。 数学原理&#xff0c;逃不掉的&#xff0c;硬着头皮看吧。&#xff09; 2 、DPSD …

【电路笔记】-电阻器颜色代码与阻值计算

电阻器颜色代码与阻值计算 文章目录 电阻器颜色代码与阻值计算1、概述2、计算电阻器颜色代码值3、贴片电阻器 电阻器颜色编码使用色带轻松识别电阻器的电阻值及其百分比容差。 1、概述 由于有许多不同类型的电阻器可用&#xff0c;我们需要形成电阻器颜色代码系统以便能够识别…

LuatOS-SOC接口文档(air780E)--repl - “读取-求值-输出” 循环

示例 --[[ 本功能支持的模块及对应的端口 模块/芯片 端口 波特率及其他参数 Air101/Air103 UART0 921600 8 None 1 Air105 UART0 1500000 8 None 1 ESP32C3 UART0 921600 8 None 1 -- 注意, 简约版(无CH343)不支持 ESP32C2 …

Java 注解在 Android 中的使用场景

Java 元注解有 5 种&#xff0c;常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别&#xff0c;有三种&#xff1a; RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中&#xff0c;并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…

力扣104. 二叉树的最大深度

目录 1.解题思路2.代码实现 1.解题思路 如果我们知道了左子树和右子树的最大深度&#xff0c;那么该二叉树的最大深度即为大的深度加一,而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言&#x…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条&#xff0c;无论你拖拽滚动条&#xff0c;选中滚动条之后按键盘…

Doris的PROPERTIES与ENGINE(九)

接上篇----------Doris分区与分桶 在建表语句的最后 PROPERTIES 中&#xff0c;可以指定以下两个参数&#xff1a; replication_num 每个 Tablet 的副本数量。默认为 3&#xff0c;建议保持默认即可。在建表语句中&#xff0c;所有 Partition 中的 Tablet 副本数量统一指定。…

【论文阅读】TACAN:控制器局域网中通过隐蔽通道的发送器认证

文章目录 摘要一、引言二、相关工作三、系统和对手模型3.1 系统模型对手模型 四、TACAN4.1 TACAN 架构4.2 发送方认证协议4.3 基于IAT的隐蔽通道4.4 基于偏移的隐蔽通道&#xff08;本节公式格式暂未整理&#xff09;4.5 基于LSB的隐蔽通道 摘要 如今&#xff0c;汽车系统与现…

一个GPU版本的遗传算法迭代xgboost最优参数的示例,这里用的是自定义损失函数

一个简单的遗传算法迭代xgboost最优参数的示例&#xff0c;这里用的是自定义损失函数 import pandas as pd import numpy as np import xgboost as xgb from sko.GA import GA from sklearn.model_selection import train_test_split from sklearn.linear_model import Logisti…

vscode Markdown 预览样式美化多方案推荐

优雅的使用 vscode写 Markdown&#xff0c;预览样式美化 1 介绍 我已经习惯使用 vscode 写 markdown。不是很喜欢他的 markdown 样式&#xff0c;尤其是代码块高亮的样式。当然用 vscode 大家基本上都会选择安装一个Markdown-preview-enhanced的插件&#xff0c;这个插件的确…

SpringBoot定时任务报错Unexpected error occurred in scheduled task原因及其解决方法(亲测有效)

问题 spring boot项目在线上一直正常运行没有错误&#xff0c;然后今天发生了报错&#xff0c;如图 这是一个定时器错误&#xff0c;发生这个报错 主要有两个原因 定时器编写的有错误Scheduled注解方式级别高于资源注入级别&#xff0c;导致了资源注入失败 以下是我的代码 …

单片机学习4——中断的概念

中断的概念&#xff1a; CPU在处理A事件的时候&#xff0c;发生了B事件&#xff0c;请求CPU迅速去处理。&#xff08;中断产生&#xff09; CPU暂时中断当前的工作&#xff0c;转去处理B事件。&#xff08;中断响应和中断服务&#xff09; 待CPU将B事件处理完毕后&#xff0…

【物联网开发】、【小程序蓝牙通讯数据校验】JS CRC-16-MODBUS 验证 高位在前地位在后;JS异或校验;16进制字符串和float互转

1.CRC校验 /*计算CRC-16/MODBUS校验位高低位*/ function calculateCRC16Modbus(dataHexString) {const dataBytes [];for (let i 0; i < dataHexString.length; i 2) {dataBytes.push(parseInt(dataHexString.substr(i, 2), 16));}let crc 0xFFFF;const polynomial 0x…

【数据结构初阶(5)】链式队列的基本操作实现

文章目录 队列的定义初始化队列队尾入队列队头出队列取队头元素取队尾元素获取队列有效元素个数判断队空销毁队列 因为队列比较简单&#xff0c;关于队列的概念就不过多赘述了&#xff0c;本文只讲链队的基本操作实现 队列的定义 定义队列结点结构 链队中的每个结点都应该包…

windows安装mysql5.7.26

解压mysql5.7.26文件夹拷贝到c:下 添加系统环境变量C:\mysql-5.7.26\bin cmd管理员打开终端,进入C:\mysql-5.7.26\bin 运行mysqld --initialize&#xff0c;生成data目录的文件。 在安装目录下创建my.ini文件&#xff0c;点击编辑&#xff0c;配置以下信息&#xff1a; 设置my…

Go 数字类型

一、数字类型 1、Golang 数据类型介绍 Go 语言中数据类型分为&#xff1a;基本数据类型和复合数据类型基本数据类型有&#xff1a; 整型、浮点型、布尔型、字符串复合数据类型有&#xff1a; 数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;、接口 2、…

什么是 dropblock

大家好啊&#xff0c;我是董董灿。 之前介绍过 dropout 算法&#xff0c;它在训练神经网络中&#xff0c;可以随机丢弃神经元&#xff0c;是一种防止网络过拟合的方法。 但是在卷积神经网络中&#xff0c;dropout 的表现却不是很好&#xff0c;于是研究人员又搞了一个“结构化…

Python列表:操作与实例分析,你值得一看!

Python列表是一种重要的数据结构&#xff0c;它允许您存储和管理多个数据项。本文将深入探讨Python列表的操作&#xff0c;以及通过具体实例分析如何使用它们&#xff0c;以帮助您更好地理解和优化您的代码。 什么是Python列表&#xff1f; Python列表是一种有序、可变的数据结…