【Python基础】在pandas中使用pipe()提升代码可读性
1 簡介
我們在利用pandas開展數(shù)據(jù)分析時,應盡量避免過于「碎片化」的組織代碼,尤其是創(chuàng)建出過多不必要的「中間變量」,既浪費了「內(nèi)存」,又帶來了關(guān)于變量命名的麻煩,更不利于整體分析過程代碼的可讀性,因此以流水線方式組織代碼非常有必要。
圖1而在以前我撰寫的一些文章中,為大家介紹過pandas中的eval()和query()這兩個幫助我們鏈式書寫代碼,搭建數(shù)據(jù)分析工作流的實用API,再加上下面要介紹的pipe(),我們就可以將任意pandas代碼完美組織成流水線形式。
2 在pandas中靈活利用pipe()
pipe()顧名思義,就是專門用于對Series和DataFrame操作進行流水線(pipeline)改造的API,其作用是將嵌套的函數(shù)調(diào)用過程改造為「鏈式」過程,其第一個參數(shù)func傳入作用于對應Series或DataFrame的函數(shù)。
具體來說pipe()有兩種使用方式,「第一種方式」下,傳入函數(shù)對應的第一個位置上的參數(shù)必須是目標Series或DataFrame,其他相關(guān)的參數(shù)使用常規(guī)的「鍵值對」方式傳入即可,就像下面的例子一樣,我們自編函數(shù)對「泰坦尼克數(shù)據(jù)集」進行一些基礎(chǔ)的特征工程處理:
import?pandas?as?pdtrain?=?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#?鏈式流水線 (train#?將Pclass列轉(zhuǎn)換為字符型以便之后的啞變量處理.eval('Pclass=Pclass.astype("str")',?engine='python')#?刪除指定列.drop(columns=['PassengerId',?'Name',?'Cabin',?'Ticket'])#?利用pipe以鏈式的方式調(diào)用自編函數(shù).pipe(do_something,?dummy_columns=['Pclass',?'Sex',?'Embarked'])#?刪除含有缺失值的行.dropna() )可以看到,在緊接著drop()下一步的pipe()中,我們將自編函數(shù)作為其第一個參數(shù)傳入,從而將一系列操作巧妙地嵌入到鏈式過程中。
「第二種使用方式」適合目標Series和DataFrame不為傳入函數(shù)第一個參數(shù)的情況,譬如下面的例子中我們假設(shè)目標輸入數(shù)據(jù)為第二個參數(shù)data2,則pipe()的第一個參數(shù)應以(函數(shù)名, '參數(shù)名稱')的格式傳入:
def?do_something(data1,?data2,?axis):'''自編示例函數(shù)'''data?=?(pd.concat([data1,?data2],?axis=axis))return?data#?pipe()第二種使用方式 (train.pipe((do_something,?'data2'),?data1=train,?axis=0) )在這樣的設(shè)計下我們可以避免很多函數(shù)嵌套調(diào)用方式,隨心所欲地優(yōu)化我們的代碼~
以上就是本文的全部內(nèi)容,歡迎在評論區(qū)與我進行討論~
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統(tǒng)計學習方法》的代碼復現(xiàn)專輯 AI基礎(chǔ)下載機器學習的數(shù)學基礎(chǔ)專輯 獲取一折本站知識星球優(yōu)惠券,復制鏈接直接打開: https://t.zsxq.com/y7uvZF6 本站qq群704220115。加入微信群請掃碼:總結(jié)
以上是生活随笔為你收集整理的【Python基础】在pandas中使用pipe()提升代码可读性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刷了三遍面试题仍拿不到offer?如何掌
- 下一篇: 【NLP】图解 Attention完整版