您好,登錄后才能下訂單哦!
本篇內容主要講解“在pandas中如何使用pipe()提升代碼可讀性”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“在pandas中如何使用pipe()提升代碼可讀性”吧!
1. 簡介
我們在利用pandas開展數據分析時,應盡量避免過于「碎片化」的組織代碼,尤其是創建出過多不必要的「中間變量」,既浪費了「內存」,又帶來了關于變量命名的麻煩,更不利于整體分析過程代碼的可讀性,因此以流水線方式組織代碼非常有必要。
圖1
而在以前我撰寫的一些文章中,為大家介紹過pandas中的eval()和query()這兩個幫助我們鏈式書寫代碼,搭建數據分析工作流的實用API,再加上下面要介紹的pipe(),我們就可以將任意pandas代碼完美組織成流水線形式。
2. 在pandas中靈活利用pipe()pipe()
顧名思義,就是專門用于對Series和DataFrame操作進行流水線(pipeline)改造的API,其作用是將嵌套的函數調用過程改造為「鏈式」過程,其第一個參數func傳入作用于對應Series或DataFrame的函數。
具體來說pipe()有兩種使用方式,「第一種方式」下,傳入函數對應的第一個位置上的參數必須是目標Series或DataFrame,其他相關的參數使用常規的「鍵值對」方式傳入即可,就像下面的例子一樣,我們自編函數對「泰坦尼克數據集」進行一些基礎的特征工程處理:
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('PclassPclass=Pclass.astype("str")', engine='python') # 刪除指定列 .drop(columns=['PassengerId', 'Name', 'Cabin', 'Ticket']) # 利用pipe以鏈式的方式調用自編函數 .pipe(do_something, dummy_columns=['Pclass', 'Sex', 'Embarked']) # 刪除含有缺失值的行 .dropna() )
可以看到,在緊接著drop()下一步的pipe()中,我們將自編函數作為其第一個參數傳入,從而將一系列操作巧妙地嵌入到鏈式過程中。
「第二種使用方式」適合目標Series和DataFrame不為傳入函數第一個參數的情況,譬如下面的例子中我們假設目標輸入數據為第二個參數data2,則pipe()的第一個參數應以(函數名, '參數名稱')的格式傳入:
def do_something(data1, data2, axis): ''' 自編示例函數 ''' data = ( pd .concat([data1, data2], axisaxis=axis) ) return data # pipe()第二種使用方式 ( train .pipe((do_something, 'data2'), data1=train, axis=0) )
在這樣的設計下我們可以避免很多函數嵌套調用方式,隨心所欲地優化我們的代碼~
到此,相信大家對“在pandas中如何使用pipe()提升代碼可讀性”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。