python優(yōu)化數(shù)據(jù)預(yù)處理方法Pandas pipe詳解
我們知道現(xiàn)實中的數(shù)據(jù)通常是雜亂無章的,需要大量的預(yù)處理才能使用。Pandas 是應(yīng)用最廣泛的數(shù)據(jù)分析和處理庫之一,它提供了多種對原始數(shù)據(jù)進(jìn)行預(yù)處理的方法。
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
上述數(shù)據(jù)中 NaN 表示的缺失值,id 列包含重復(fù)的值,B 列中的 112 似乎是一個異常值。
這些就是現(xiàn)實數(shù)據(jù)中的一些典型問題。我們將創(chuàng)建一個管道來處理剛才描述的問題。對于每個任務(wù),我們都需要一個函數(shù)。因此,首先是創(chuàng)建放置在管道中的函數(shù)。需要注意的是,管道中使用的函數(shù)需要將數(shù)據(jù)幀作為參數(shù)并返回數(shù)據(jù)幀。
第一個函數(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ù)具體場景來定義。只要它將數(shù)據(jù)幀作為參數(shù)并返回數(shù)據(jù)幀,它就可以在管道中工作。
第二個函數(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ù)值。
最后一個函數(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ù)的作用如下:
- 需要一個數(shù)據(jù)幀和一列列表
- 對于列表中的每一列,它計算平均值和標(biāo)準(zhǔn)偏差
- 計算標(biāo)準(zhǔn)差,并使用下限平均值
- 刪除下限和上限定義的范圍之外的值
與前面的函數(shù)一樣,你可以選擇自己的檢測異常值的方法。
創(chuàng)建管道
我們現(xiàn)在有3個函數(shù)來進(jìn)行數(shù)據(jù)預(yù)處理的任務(wù)。接下來就是使用這些函數(shù)創(chuàng)建管道。
df_processed = (df.pipe(fill_missing_values).pipe(drop_duplicates, "id").pipe(remove_outliers, ["A","B"]))
此管道按給定順序執(zhí)行函數(shù)。我們可以將參數(shù)和函數(shù)名一起傳遞給管道。
這里需要提到的一點是,管道中的一些函數(shù)修改了原始數(shù)據(jù)幀。因此,使用上述管道也將更新df。
解決此問題的一個方法是在管道中使用原始數(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)然,你可以通過單獨使用這些函數(shù)來完成相同的任務(wù)。但是,管道函數(shù)提供了一種結(jié)構(gòu)化和有組織的方式,可以將多個功能組合到單個操作中。
根據(jù)原始數(shù)據(jù)和任務(wù),預(yù)處理可能包括更多步驟??梢愿鶕?jù)需要在管道函數(shù)中添加任意數(shù)量的步驟。隨著步驟數(shù)量的增加,與單獨執(zhí)行函數(shù)相比,管道函數(shù)的語法變得更清晰。
以上就是python優(yōu)化數(shù)據(jù)預(yù)處理方法Pandas pipe詳解的詳細(xì)內(nèi)容,更多關(guān)于pandas pipe數(shù)據(jù)預(yù)處理優(yōu)化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
LyScript實現(xiàn)Hook隱藏調(diào)試器的方法詳解
LyScript?插件集成的內(nèi)置API函數(shù)可靈活的實現(xiàn)繞過各類反調(diào)試保護(hù)機(jī)制。本文將運用LyScript實現(xiàn)繞過大多數(shù)通用調(diào)試機(jī)制,實現(xiàn)隱藏調(diào)試器的目的,需要的可以參考一下2022-09-09python如何通過pyqt5實現(xiàn)進(jìn)度條
這篇文章主要介紹了python如何通過pyqt5實現(xiàn)進(jìn)度條,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01Python實現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實例
下面小編就為大家?guī)硪黄狿ython實現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12Python中print函數(shù)簡單使用總結(jié)
在本篇文章里小編給大家整理的是關(guān)于Python中怎么使用print函數(shù)的相關(guān)知識點內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2019-08-08python中elasticsearch_dsl模塊的使用方法
這篇文章主要介紹了python中elasticsearch_dsl模塊的使用方法,elasticsearch-dsl是基于elasticsearch-py封裝實現(xiàn)的,提供了更簡便的操作elasticsearch的方法2022-09-09Python如何利用正則表達(dá)式爬取網(wǎng)頁信息及圖片
這篇文章主要給大家介紹了關(guān)于Python如何利用正則表達(dá)式爬取網(wǎng)頁信息及圖片的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python面向?qū)ο箢惥帉懠?xì)節(jié)分析【類,方法,繼承,超類,接口等】
這篇文章主要介紹了Python面向?qū)ο箢惥帉懠?xì)節(jié),較為詳細(xì)的分析了Python面向?qū)ο蟪绦蛟O(shè)計中類,方法,繼承,超類,接口等相關(guān)概念、使用技巧與注意事項,需要的朋友可以參考下2019-01-01Flask框架運用Ajax實現(xiàn)數(shù)據(jù)交互的示例代碼
使用Ajax技術(shù)網(wǎng)頁應(yīng)用能夠快速地將增量更新呈現(xiàn)在用戶界面上,而不需要重載刷新整個頁面,這使得程序能夠更快地回應(yīng)用戶的操作,本文將簡單介紹使用AJAX如何實現(xiàn)前后端數(shù)據(jù)通信2022-11-11使用Python實現(xiàn)炫酷的數(shù)據(jù)動態(tài)圖大全
數(shù)據(jù)可視化是通過圖形、圖表、地圖等可視元素將數(shù)據(jù)呈現(xiàn)出來,以便更容易理解、分析和解釋,它是將抽象的數(shù)據(jù)轉(zhuǎn)化為直觀形象的過程,本文給大家介紹了使用Python實現(xiàn)炫酷的數(shù)據(jù)動態(tài)圖大全,需要的朋友可以參考下2024-06-06