溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在pandas中如何使用pipe()提升代碼可讀性

發(fā)布時(shí)間:2021-07-24 09:14:16 來源:億速云 閱讀:177 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“在pandas中如何使用pipe()提升代碼可讀性”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“在pandas中如何使用pipe()提升代碼可讀性”吧!

1. 簡介

我們在利用pandas開展數(shù)據(jù)分析時(shí),應(yīng)盡量避免過于「碎片化」的組織代碼,尤其是創(chuàng)建出過多不必要的「中間變量」,既浪費(fèi)了「內(nèi)存」,又帶來了關(guān)于變量命名的麻煩,更不利于整體分析過程代碼的可讀性,因此以流水線方式組織代碼非常有必要。

圖1

而在以前我撰寫的一些文章中,為大家介紹過pandas中的eval()和query()這兩個(gè)幫助我們鏈?zhǔn)綍鴮懘a,搭建數(shù)據(jù)分析工作流的實(shí)用API,再加上下面要介紹的pipe(),我們就可以將任意pandas代碼完美組織成流水線形式。

2.  在pandas中靈活利用pipe()pipe()

顧名思義,就是專門用于對Series和DataFrame操作進(jìn)行流水線(pipeline)改造的API,其作用是將嵌套的函數(shù)調(diào)用過程改造為「鏈?zhǔn)健惯^程,其第一個(gè)參數(shù)func傳入作用于對應(yīng)Series或DataFrame的函數(shù)。

具體來說pipe()有兩種使用方式,「第一種方式」下,傳入函數(shù)對應(yīng)的第一個(gè)位置上的參數(shù)必須是目標(biāo)Series或DataFrame,其他相關(guān)的參數(shù)使用常規(guī)的「鍵值對」方式傳入即可,就像下面的例子一樣,我們自編函數(shù)對「泰坦尼克數(shù)據(jù)集」進(jìn)行一些基礎(chǔ)的特征工程處理:

import pandas as pd  train = pd.read_csv('train.csv')  def do_something(data, dummy_columns):     '''     自編示例函數(shù)     '''      data = (         pd         # 對指定列生成啞變量         .get_dummies(data, # 先刪除data中指定列                      columns=dummy_columns,                      drop_first=True)     )          return data  # 鏈?zhǔn)搅魉€ (     train     # 將Pclass列轉(zhuǎn)換為字符型以便之后的啞變量處理     .eval('PclassPclass=Pclass.astype("str")', engine='python')     # 刪除指定列     .drop(columns=['PassengerId', 'Name', 'Cabin', 'Ticket'])     # 利用pipe以鏈?zhǔn)降姆绞秸{(diào)用自編函數(shù)     .pipe(do_something,            dummy_columns=['Pclass', 'Sex', 'Embarked'])     # 刪除含有缺失值的行     .dropna() )

可以看到,在緊接著drop()下一步的pipe()中,我們將自編函數(shù)作為其第一個(gè)參數(shù)傳入,從而將一系列操作巧妙地嵌入到鏈?zhǔn)竭^程中。

「第二種使用方式」適合目標(biāo)Series和DataFrame不為傳入函數(shù)第一個(gè)參數(shù)的情況,譬如下面的例子中我們假設(shè)目標(biāo)輸入數(shù)據(jù)為第二個(gè)參數(shù)data2,則pipe()的第一個(gè)參數(shù)應(yīng)以(函數(shù)名,  '參數(shù)名稱')的格式傳入:

def do_something(data1, data2, axis):     '''     自編示例函數(shù)     '''      data = (         pd         .concat([data1, data2], axisaxis=axis)     )          return data  # pipe()第二種使用方式 (     train     .pipe((do_something, 'data2'), data1=train, axis=0) )

在這樣的設(shè)計(jì)下我們可以避免很多函數(shù)嵌套調(diào)用方式,隨心所欲地優(yōu)化我們的代碼~

到此,相信大家對“在pandas中如何使用pipe()提升代碼可讀性”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI