1 简介

  我们在利用pandas开展数据分析时,应尽量避免过于碎片化的组织代码,尤其是创建出过多不必要的中间变量,既浪费了内存,又带来了关于变量命名的麻烦,更不利于整体分析过程代码的可读性,因此以流水线方式组织代码非常有必要。

图1

  而在以前我撰写的一些文章中,为大家介绍过pandas中的eval()query()这两个帮助我们链式书写代码,搭建数据分析工作流的实用API,再加上下面要介绍的pipe(),我们就可以将任意pandas代码完美组织成流水线形式。

2 在pandas中灵活利用pipe()

  pipe()顾名思义,就是专门用于对SeriesDataFrame操作进行流水线(pipeline)改造的API,其作用是将嵌套的函数调用过程改造为链式过程,其第一个参数func传入作用于对应SeriesDataFrame的函数。

  具体来说pipe()有两种使用方式,第一种方式下,传入函数对应的第一个位置上的参数必须是目标SeriesDataFrame,其他相关的参数使用常规的键值对方式传入即可,就像下面的例子一样,我们自编函数对泰坦尼克数据集进行一些基础的特征工程处理:

import pandas as pd

train = pd.read_csv('train.csv')

def do_something(data, dummy_columns):
'''
自编示例函数
''' data = (
pd
# 对指定列生成哑变量
.get_dummies(data, # 先删除data中指定列
columns=dummy_columns,
drop_first=True)
) return data # 链式流水线
(
train
# 将Pclass列转换为字符型以便之后的哑变量处理
.eval('Pclass=Pclass.astype("str")', engine='python')
# 删除指定列
.drop(columns=['PassengerId', 'Name', 'Cabin', 'Ticket'])
# 利用pipe以链式的方式调用自编函数
.pipe(do_something,
dummy_columns=['Pclass', 'Sex', 'Embarked'])
# 删除含有缺失值的行
.dropna()
)

  可以看到,在紧接着drop()下一步的pipe()中,我们将自编函数作为其第一个参数传入,从而将一系列操作巧妙地嵌入到链式过程中。

  第二种使用方式适合目标SeriesDataFrame不为传入函数第一个参数的情况,譬如下面的例子中我们假设目标输入数据为第二个参数data2,则pipe()的第一个参数应以(函数名, '参数名称')的格式传入:

def do_something(data1, data2, axis):
'''
自编示例函数
''' data = (
pd
.concat([data1, data2], axis=axis)
) return data # pipe()第二种使用方式
(
train
.pipe((do_something, 'data2'), data1=train, axis=0)
)

  在这样的设计下我们可以避免很多函数嵌套调用方式,随心所欲地优化我们的代码~


  以上就是本文的全部内容,欢迎在评论区与我进行讨论~

在pandas中使用pipe()提升代码可读性的更多相关文章

  1. 提升代码幸福度,五个技巧减少js开发中的if else语句

     壹 ❀ 引 在JavaScript开发中,条件判断语句的使用频率是极高的,而对于条件判断简单易读的if else应该都是大家的首选.可是代码写的久了,我们总是希望自己的代码看着能更为简洁规范(逼格更 ...

  2. Atitit.提升语言可读性原理与实践

    Atitit.提升语言可读性原理与实践 表1-1  语言评价标准和影响它们的语言特性1 1.3.1.2  正交性2 1.3.2.2  对抽象的支持3 1.3.2.3  表达性3 .6  语言设计中的权 ...

  3. pandas中的分组技术

    目录 1  分组操作 1.1  按照列进行分组 1.2  按照字典进行分组 1.3  根据函数进行分组 1.4  按照list组合 1.5  按照索引级别进行分组 2  分组运算 2.1  agg 2 ...

  4. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

  5. 【转载】pandas中的循环

    原始文章链接: https://towardsdatascience.com/how-to-make-your-pandas-loop-71-803-times-faster-805030df4f06 ...

  6. (数据科学学习手札131)pandas中的常用字符串处理方法总结

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常开展数据分析的过程中,我们经常需要对 ...

  7. 你真的会用react hooks?看看eslint警告吧!(如何发请求、提升代码性能等问题)

    前言 看过几个react hooks 的项目,控制台上几百条警告,大多是语法不规范,react hooks 使用有风险,也有项目直接没开eslint.当然,这些项目肯定跑起来了,因为react自身或者 ...

  8. 2.2、Android Studio通过注解提升代码检测

    使用像Lint这样的代码检测工具可以帮助你发现问题和提升代码,但是代码检测在有些地方很难应用.例如,Android的资源ID,使用一个int类型来表示字符.图像.颜色或者其他资源类型所以代码检测工具不 ...

  9. PHP之提升代码质量36计

    转载:https://www.binarytides.com/35-techniques-to-enhance-your-php-code/ 1.不要使用相对路径 常常会看到: require_onc ...

随机推荐

  1. 002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介

    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介 学习Java的基础语法 Java是一门编程语言,学习的逻辑其实和现实世界的语言是一样的,需要了 ...

  2. vue点击切换样式,点击切换地址栏,点击显示或者隐藏

    1. vue点击显示切换 :class='{"span":index==0}' class原本是 类选择器 加上 :class就是绑定属性的意思 '{"span" ...

  3. Python+Appium自动化测试(8)-swipe()滑动页面

    app自动化测试过程中,经常会遇到滑动屏幕操作,appium框架的话我们可以使用webdriver提供的swipe()方法来对屏幕页面进行上滑.下滑.左滑.右滑操作. 一,swipe方法介绍 swip ...

  4. boost之asio

    asio asio是C++的准标准网络库,并且C++20标准库的网络部分将基于ASIO,需引入头文件#include <boost/asio.hpp>. ip地址 boost定义了表示ip ...

  5. pytest文档59-运行未提交git的用例(pytest-picked)

    前言 我们每天写完自动化用例后都会提交到 git 仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交 git 仓库的用例. pytest-picked 插件可 ...

  6. centos8使用systemd/systemctl管理系统/服务

    一,systemd的用途? Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置 Systemd 的优点是功能强大,使用方便, 缺点是体系庞大,非常复杂 在cent ...

  7. python操作excel xlwt (转)

    Python中xlrd和xlwt模块使用方法   阅读目录 安装 xlrd模块使用 xlwt模块 xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 回到顶部 安装 ? ...

  8. XSS攻击 js 脚本注入

    原文地址:http://www.cnblogs.com/robot/archive/2009/04/15/1436107.html 1.不要相信Request.QueryString: 相信在asp时 ...

  9. 1.opengl绘制三角形

    顶点数组对象:Vertex Array Object,VAO,用于存储顶点状态配置信息,每当界面刷新时,则通过VAO进行绘制. 顶点缓冲对象:Vertex Buffer Object,VBO,通过VB ...

  10. FrameworkElementFactory中的SetBinding与SetValue

    public static Microsoft.Windows.Controls.DataGridColumn CreateDateColumn(string path, string header) ...