在pandas中使用pipe()提升代码可读性

简介: 在pandas中使用pipe()提升代码可读性

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)
)

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

相关文章
|
数据处理 Python
Pandas数据处理 | apply() 函数用法指南!
本文介绍一下关于 Pandas 中 apply() 函数的几个常见用法,apply() 函数的自由度较高,可以直接对 Series 或者 DataFrame 中元素进行逐元素遍历操作,方便且高效,具有类似于 Numpy 的特性。
|
2月前
|
数据采集 数据挖掘 数据格式
Pandas的用法
【7月更文挑战第9天】Pandas的用法
23 3
|
4月前
|
SQL 机器学习/深度学习 数据处理
10个Pandas的高级技巧
Pandas是我们最常用的数据处理Python库之一。尽管您可能已经与它共事多年,但可能还有许多您尚未探索的实用方法。我将向您展示一些可能未曾听说但在数据整理方面非常实用的方法。
116 0
|
4月前
|
存储 JSON 数据格式
4个解决特定的任务的Pandas高效代码
在本文中,我将分享4个在一行代码中完成的Pandas操作。这些操作可以有效地解决特定的任务,并以一种好的方式给出结果。
136 2
|
存储 数据采集 数据可视化
15个基本且常用Pandas代码片段
Pandas提供了强大的数据操作和分析功能,是数据科学的日常基本工具。在本文中,我们将介绍最常用的15个Pandas代码片段。这些片段将帮助简化数据分析任务,从数据集中提取有价值的见解。
88 0
|
SQL 存储 JSON
Pandas.read_csv()函数及全部参数使用方法一文详解+实例代码(上)
Pandas.read_csv()函数及全部参数使用方法一文详解+实例代码
1305 0
Pandas.read_csv()函数及全部参数使用方法一文详解+实例代码(上)
|
存储 数据可视化 安全
Pandas字符串操作的各种方法速度测试
由于LLM的发展, 很多的数据集都是以DF的形式发布的,所以通过Pandas操作字符串的要求变得越来越高了,所以本文将对字符串操作方法进行基准测试,看看它们是如何影响pandas的性能的。因为一旦Pandas在处理数据时超过一定限制,它们的行为就会很奇怪。
104 0
|
Python
Python库函数pandas读取excel数据
pandas 读取excel文件使用的是 read_excel方法。本文将详细解析read_excel方法的常用参数,以及实际的使用示例
|
索引 Python
Python3,Pandas 5行代码实现对excel 读写操作
Python3,Pandas 5行代码实现对excel 读写操作
205 0
Python3,Pandas 5行代码实现对excel 读写操作
|
存储 Python
Pandas | value_counts() 的详细用法
Pandas | value_counts() 的详细用法
788 0
Pandas | value_counts() 的详细用法