热门标签 | 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()操作放在自定义函数里面,通过链式编程的方式实现统领作用。

 


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • PyCharm中配置Pylint静态代码分析工具
    本文详细介绍如何在PyCharm中配置和使用Pylint,帮助开发者进行静态代码检查,确保代码符合PEP8规范,提高代码质量。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
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社区 版权所有