<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas pipe: 一種更優(yōu)雅的數(shù)據(jù)預(yù)處理方法!

          共 3007字,需瀏覽 7分鐘

           ·

          2021-08-02 08:49

          我們知道現(xiàn)實(shí)中的數(shù)據(jù)通常是雜亂無(wú)章的,需要大量的預(yù)處理才能使用。Pandas 是應(yīng)用最廣泛的數(shù)據(jù)分析和處理庫(kù)之一,它提供了多種對(duì)原始數(shù)據(jù)進(jìn)行預(yù)處理的方法。

          在本文中,我們將重點(diǎn)討論一個(gè)將「多個(gè)預(yù)處理操作」組織成「單個(gè)操作」的特定函數(shù):pipe。

          在本文中,我將通過(guò)示例方式來(lái)展示如何使用它,讓我們從數(shù)據(jù)創(chuàng)建數(shù)據(jù)幀開始吧。

          import numpy as np
          import pandas as pd
          df = pd.DataFrame({
             "id": [100100101102103104105106],
             "A": [123452, np.nan, 5],
             "B": [45564847621125449],
             "C": [1.21.41.11.8, np.nan, 1.41.61.5]
          })
          df

          上述數(shù)據(jù)中 NaN 表示的缺失值,id 列包含重復(fù)的值,B 列中的 112 似乎是一個(gè)異常值。

          這些就是現(xiàn)實(shí)數(shù)據(jù)中的一些典型問題。我們將創(chuàng)建一個(gè)管道來(lái)處理剛才描述的問題。對(duì)于每個(gè)任務(wù),我們都需要一個(gè)函數(shù)。因此,首先是創(chuàng)建放置在管道中的函數(shù)。需要注意的是,管道中使用的函數(shù)需要將數(shù)據(jù)幀作為參數(shù)并返回?cái)?shù)據(jù)幀。

          第一個(gè)函數(shù)是處理缺少的值

          def fill_missing_values(df):
             for col in df.select_dtypes(include= ["int","float"]).columns:
                val = df[col].mean()
                df[col].fillna(val, inplace=True)
             return df

          我喜歡用列的平均值替換數(shù)字列中缺少的值,當(dāng)然你也可以根據(jù)具體場(chǎng)景來(lái)定義。只要它將數(shù)據(jù)幀作為參數(shù)并返回?cái)?shù)據(jù)幀,它就可以在管道中工作。

          第二個(gè)函數(shù)是幫助我們刪除重復(fù)的值

          def drop_duplicates(df, column_name):
             df = df.drop_duplicates(subset=column_name)
             return df

          調(diào)用 Pandas 內(nèi)置的 drop duplicates 函數(shù),它可以消除給定列中的重復(fù)值。

          最后一個(gè)函數(shù)是用于消除異常值

          def remove_outliers(df, column_list):
             for col in column_list:
                avg = df[col].mean()
                std = df[col].std()
                low = avg - 2 * std
                high = avg + 2 * std
                df = df[df[col].between(low, high, inclusive=True)]
             return df

          此函數(shù)的作用如下:

          • 需要一個(gè)數(shù)據(jù)幀和一列列表
          • 對(duì)于列表中的每一列,它計(jì)算平均值和標(biāo)準(zhǔn)偏差
          • 計(jì)算標(biāo)準(zhǔn)差,并使用下限平均值
          • 刪除下限和上限定義的范圍之外的值

          與前面的函數(shù)一樣,你可以選擇自己的檢測(cè)異常值的方法。

          創(chuàng)建管道

          我們現(xiàn)在有3個(gè)函數(shù)來(lái)進(jìn)行數(shù)據(jù)預(yù)處理的任務(wù)。接下來(lái)就是使用這些函數(shù)創(chuàng)建管道。

          df_processed = (df.pipe(fill_missing_values).pipe(drop_duplicates, "id").pipe(remove_outliers, ["A","B"]))

          此管道按給定順序執(zhí)行函數(shù)。我們可以將參數(shù)和函數(shù)名一起傳遞給管道。

          這里需要提到的一點(diǎn)是,管道中的一些函數(shù)修改了原始數(shù)據(jù)幀。因此,使用上述管道也將更新df。

          解決此問題的一個(gè)方法是在管道中使用原始數(shù)據(jù)幀的副本。如果你不關(guān)心保持原始數(shù)據(jù)幀的原樣,那么可以在管道中使用它。

          我將更新管道,如下所示:

          my_df = df.copy()
          df_processed = (my_df.pipe(fill_missing_values).pipe(drop_duplicates, "id").pipe(remove_outliers, ["A","B"]))

          讓我們看一下原始數(shù)據(jù)幀和處理后的數(shù)據(jù)幀:

          結(jié)論

          當(dāng)然,你可以通過(guò)單獨(dú)使用這些函數(shù)來(lái)完成相同的任務(wù)。但是,管道函數(shù)提供了一種結(jié)構(gòu)化和有組織的方式,可以將多個(gè)功能組合到單個(gè)操作中。

          根據(jù)原始數(shù)據(jù)和任務(wù),預(yù)處理可能包括更多步驟。可以根據(jù)需要在管道函數(shù)中添加任意數(shù)量的步驟。隨著步驟數(shù)量的增加,與單獨(dú)執(zhí)行函數(shù)相比,管道函數(shù)的語(yǔ)法變得更清晰。

          大家好,最后給大家免費(fèi)分享 Python 三件套:《ThinkPython》、《簡(jiǎn)明Python教程》、《Python進(jìn)階》的PDF電子版。如果你是剛?cè)腴T的小白,不用想了,這是最好的學(xué)習(xí)教材。

          現(xiàn)在免費(fèi)分享出來(lái),有需要的讀者可以下載學(xué)習(xí),在下面的公眾號(hào)里回復(fù)關(guān)鍵字:三件套,就行。

          領(lǐng)取方式:

          長(zhǎng)按下方掃碼,關(guān)注后發(fā)消息 [三件套]


          感謝你的分享,點(diǎn)贊,在看  

          瀏覽 53
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  搞搞网日本9 | 国内精品久久久久久久久鸭下载 | 夜色福利在线免费 | 亚洲第一黄色视频 | 成人影视久久久无码三区 |