热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pandas管道函数pipe

1.概述在操作Series或者DataFrame级别数据时,例如修改、删除等,需要用到一些特别的函数,常用的有下面几个:

1.概述

在操作Series或者DataFrame级别数据时,例如修改、删除等,需要用到一些特别的函数,常用的有下面几个:

1.apply():以DataFrame的行或列为单位(由axis参数决定),操作数据。

2.applymap():操作DataFrame中的每个元素。

3.map():操作Series,或者DataFrame中某一列的元素。

4.pipe():操作整个DataFrame或者 Series中的所有元素。


2.pipe介绍

相对来说,前面三个函数理解起来,相对较为容易。最不好理解的是pipe()函数。下面重点讲讲pipe函数。先看官方文档描述:


DataFrame.pipe(func*args**kwargs)

func:function

Function to apply to the Series/DataFrame. args, and kwargs are passed into func. Alternatively a (callable, data_keyword) tuple where data_keyword is a string indicating the keyword of callable that expects the Series/DataFrame.

args:iterable, optional

Positional arguments passed into func.

kwargs:mapping, optional


只看上面文档不是很好理解。通俗点来说:


df.pipe(f, *args, **kwargs) 

 效果等同于f(df, *args, **kwargs)



3.pipe()用法

那采用pipe()函数有什么好处?好处就是可以链式编程。来点实际的例子,先构建数据:

import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape(3,4))
df

 再写两个自定义函数:

#所有元素加n
def add_n(df,n):df2=df.applymap(lambda x:x+n)return df2
#所有元素减n
def minus_n(df,n):df2=df.applymap(lambda x:x-n)return df2

然后用pipe函数调用:

df.pipe(add_n,10).pipe(minus_n,5)

结果如下:

  也就先加10,再减5的结果。这种连续调用的方式就是链式编程,在以前的jQuery中经常使用,可以降低代码的复杂度。但是上面代码还可以改进下:

(df.pipe(add_n,10).pipe(minus_n,5)
)

采用缩进的方式,让代码可读性更强。但是为什么要加个括号呢?官方文档上也有解释:


Expressions in parentheses, square brackets or curly braces can be split over more than one physical line without using backslashes.


大意是:括号、方括号或大括号中的表达式可以拆分为多个行,而无需使用反斜杠。也就是说加了一个括号过后,括号内的代码就不受“空格缩进”的约束。


4.pipe()传入数据到指定的参数

 上面的函数add_n、minus_n默认第一个参数就是需要传入的Series或者DataFrame数据,那可不可以作为第二个,或者任意位置的参数,将Series或者DataFrame数据传进去呢?下面再写一个函数:

def append_df_n(df1,df2,n):df3=df1.applymap(lambda x:x-n)return df3.append(df2)

可以看出,append_df_n函数有两个可以接受DataFrame数据的参数,我们试着把pipe()调用的结果传给第二个参数。

(df.pipe(add_n,10).pipe((append_df_n,"df2"),df1=df,n=6)
)

上面代码的意思是:把pipe(add_n,10)返回的数据传给append_df_n函数的df2参数,df1与n另外单独传入。结果如下:

前三条数据是df减去6的结果,后三条数据是df加上10的结果。当然pipe(add_n,10)返回的数据也可以传给df1参数:

(df.pipe(add_n,10).pipe((append_df_n,"df1"),df2=df,n=6)
)

 结果如下:

那么前三条数据的意思是:df先加10,再减6的结果。


5.总结

pipe()函数的作用主要是用于链式编程,降低连续调用函数的代码复杂度,提高代码可读性。 如果我们只对Series或者DataFrame数据操作一次,那么应该采用apply()、applymap()、 map()函数。

如果把apply()、applymap()、 map()看作是一维空间的操作,那么pipe()就相当于二维空间的操作,它可以把所有的apply()、applymap()、 map()操作放在自定义函数里面,通过链式编程的方式实现统领作用。

 


推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
author-avatar
king
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有