python優化數據預處理方法Pandas pipe詳解
我們知道現實中的數據通常是雜亂無章的,需要大量的預處理才能使用。Pandas 是應用最廣泛的數據分析和處理庫之一,它提供瞭多種對原始數據進行預處理的方法。
import numpy as np import pandas as pd df = pd.DataFrame({ "id": [100, 100, 101, 102, 103, 104, 105, 106], "A": [1, 2, 3, 4, 5, 2, np.nan, 5], "B": [45, 56, 48, 47, 62, 112, 54, 49], "C": [1.2, 1.4, 1.1, 1.8, np.nan, 1.4, 1.6, 1.5] }) df
上述數據中 NaN 表示的缺失值,id 列包含重復的值,B 列中的 112 似乎是一個異常值。
這些就是現實數據中的一些典型問題。我們將創建一個管道來處理剛才描述的問題。對於每個任務,我們都需要一個函數。因此,首先是創建放置在管道中的函數。需要註意的是,管道中使用的函數需要將數據幀作為參數並返回數據幀。
第一個函數是處理缺少的值
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
我喜歡用列的平均值替換數字列中缺少的值,當然你也可以根據具體場景來定義。隻要它將數據幀作為參數並返回數據幀,它就可以在管道中工作。
第二個函數是幫助我們刪除重復的值
def drop_duplicates(df, column_name): df = df.drop_duplicates(subset=column_name) return df
調用 Pandas 內置的 drop duplicates 函數,它可以消除給定列中的重復值。
最後一個函數是用於消除異常值
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
此函數的作用如下:
- 需要一個數據幀和一列列表
- 對於列表中的每一列,它計算平均值和標準偏差
- 計算標準差,並使用下限平均值
- 刪除下限和上限定義的范圍之外的值
與前面的函數一樣,你可以選擇自己的檢測異常值的方法。
創建管道
我們現在有3個函數來進行數據預處理的任務。接下來就是使用這些函數創建管道。
df_processed = (df.pipe(fill_missing_values).pipe(drop_duplicates, "id").pipe(remove_outliers, ["A","B"]))
此管道按給定順序執行函數。我們可以將參數和函數名一起傳遞給管道。
這裡需要提到的一點是,管道中的一些函數修改瞭原始數據幀。因此,使用上述管道也將更新df。
解決此問題的一個方法是在管道中使用原始數據幀的副本。如果你不關心保持原始數據幀的原樣,那麼可以在管道中使用它。
我將更新管道,如下所示:
my_df = df.copy() df_processed = (my_df.pipe(fill_missing_values).pipe(drop_duplicates, "id").pipe(remove_outliers, ["A","B"]))
讓我們看一下原始數據幀和處理後的數據幀:
結論
當然,你可以通過單獨使用這些函數來完成相同的任務。但是,管道函數提供瞭一種結構化和有組織的方式,可以將多個功能組合到單個操作中。
根據原始數據和任務,預處理可能包括更多步驟。可以根據需要在管道函數中添加任意數量的步驟。隨著步驟數量的增加,與單獨執行函數相比,管道函數的語法變得更清晰。
以上就是python優化數據預處理方法Pandas pipe詳解的詳細內容,更多關於pandas pipe數據預處理優化的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- python中pandas常用命令詳解
- 聊聊python中令人迷惑的duplicated和drop_duplicates()用法
- pandas 使用insert插入一列
- Python Pandas中DataFrame.drop_duplicates()刪除重復值詳解
- 利用Pandas索引和選取數據方法詳解