tft每日頭條

 > 科技

 > python pandas 數據校驗

python pandas 數據校驗

科技 更新时间:2025-04-22 20:46:49

合并數據

在實際工作中,我們的數據源往往是來自多個地方(比如分散在不同的表裡),

具體分析的時候需要把相關聯的數據信息整合在一張表裡,可能會有如下操作:

 橫向或縱向堆疊合并數據

 主鍵合并數據

 重疊合并數據

我們可以使用 concat、append、merge、join、conbine_first 來實現上述需求

• 橫向表堆疊

 橫向堆疊,即将兩個表在 x 軸向拼接在一起,可以使用 concat 函數完成,基本語法如下:

pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None,

levels=None, names=None, verify_integrity=False, copy=True)

python pandas 數據校驗(Python數據分析五Pandas數據預處理)1

• 橫向表堆疊

 當 axis=1 的時候,concat 做行對齊,然後将不同列名稱的兩張或多張表合并。當兩個表索引不完

全一樣時,可以使用 join 參數選擇是内連接還是外連接。在内連接的情況下,僅僅返回索引重疊部

分。在外連接的情況下,則顯示索引的并集部分數據,不足的地方則使用空值填補。

 當兩張表完全一樣時,不論 join 參數取值是 inner 或者 outer,結果都是将兩個表完全按照 X 軸拼

接起來。

• 縱向堆疊——concat函數

 使用 concat 函數時,在默認情況下,即 axis=0 時,concat 做列對齊,将不同行索引的兩張或多張表縱向合并。在兩張表的列名并不完全相同的情況下,當 join 參數取值為 inner 時,返回的僅僅是列名交集所代表的列,取值為 outer 時,返回的是兩者列名的并集所代表的列

 不論 join 參數取值是 inner 或者 outer,結果都是将兩個表完全按照 Y 軸拼接起來

python pandas 數據校驗(Python數據分析五Pandas數據預處理)2

• 縱向堆疊——append方法

 DataFrame 的 append 方法也可以用于縱向合并兩張表。但是 append 方法實現縱向表堆疊有一

個前提條件,那就是兩張表的列名需要完全一緻。基本語法如下:

df.append(self, other, ignore_index=False, verify_integrity=False)

常用參數:

python pandas 數據校驗(Python數據分析五Pandas數據預處理)3

• 主鍵合并

通過一個或多個鍵将兩個數據集的行連接起來,類似于 SQL 中的 JOIN。針對同一個主鍵存在兩張包

含不同字段的表,将其根據某幾個字段一一對應拼接起來,結果集列數為兩個表的列數和再減去連接

鍵的數量。

python pandas 數據校驗(Python數據分析五Pandas數據預處理)4

• 主鍵合并——merge函數

 和數據庫的 join 一樣,merge 函數也有左連接(left)、右連接(right)、内連接(inner)和外

連接(outer),但比起數據庫 SQL 語言中的 join ,merge函數還有其自身獨到之處,例如可以在

合并過程中對數據集中的數據進行排序,用法如下:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False,

right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False)

python pandas 數據校驗(Python數據分析五Pandas數據預處理)5

• 主鍵合并——join方法

 DataFrame對象的 join 方法也可以實現主鍵合并的功能,但是 join 方法使用時,兩個主鍵的名字

必須相同,用法如下:

df.join(self, other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

python pandas 數據校驗(Python數據分析五Pandas數據預處理)6

• 重疊合并

數據分析和處理過程中偶爾會出現兩份數據的内容幾乎一緻的情況,但是某些特征在其中一張表上是

完整的,而在另外一張表上的數據則是缺失的,可以用 DataFrame 對象的 combine_first 方法進行

重疊數據合并,其用法如下:

python pandas 數據校驗(Python數據分析五Pandas數據預處理)7

• 案例

堆疊不同時間的訂單詳情表

• 訂單詳情表 meal_order_detail1、meal_order_detail2、meal_order_detail3 具有相同的特征,但數據時

間不同,訂單編号也不同,在數據分析過程中需要使用全量數據,需要将幾張表做縱向堆疊操作

主鍵合并訂單詳情表、訂單信息表和客戶信息表

• 訂單詳情表、訂單信息表和客戶信息表兩兩之間存在相同意義的字段,因此需通過主鍵合并的方式将三張

表合并為一張寬表。

清洗數據

在實際工作中,我們拿到的數據基本不會是直接就能用的,裡面包含了大量的重複數據、缺

失數據和異常數據。數據重複會導緻數據的方差變小,數據分布發生較大變化。缺失會導緻樣本

信息減少,不僅增加了數據分析的難度,而且會導緻數據分析的結果産生偏差。異常值則會産生

“僞回歸”。

因此需要對數據進行檢測,查詢是否有重複值、缺失值和異常值,并且要對這些數據進行适

當的處理,即數據清洗

• 檢測與處理重複值

處理重複數據是數據分析經常面對的問題之一。對重複數據進行處理前,需要分析重複數據

産生的原因以及去除這部分數據後可能造成的不良影響。常見的數據重複分為兩種:

記錄重複,即一個或者多個特征的某幾條記錄的值完全相同

特征重複,即存在一個或者多個特征名稱不同,但數據完全相同的情況

• 檢測與處理重複值

記錄重複

① 方法一是利用列表(list)去重,自定義去重函數:

python pandas 數據校驗(Python數據分析五Pandas數據預處理)8

② 方法二是利用集合(set)的元素是唯一的特性去重,如 dish_set = set(dishes)

比較上述兩種方法可以發現,方法一代碼冗長。方法二代碼簡單了許多,但會導緻數據的排列發生改變。

檢測與處理重複值

記錄重複

Pandas 提供了一個名為 drop_duplicates 的去重方法。該方法隻對 DataFrame 或

Series 類型有效。這種方法不會改變數據原始排列,并且兼具代碼簡潔和運行穩定的特點。

該方法不僅支持單一特征的數據去重,還能夠依據 DataFrame 的其中一個或者幾個特征

進行去重操作: df.drop_duplicates(self, subset=None, keep='first', inplace=False)

python pandas 數據校驗(Python數據分析五Pandas數據預處理)9

• 檢測與處理重複值

特征重複

 結合相關的數學和統計學知識,去除連續型特征重複可以利用特征間的相似度将兩個相似度為1的

特征去除一個。在 Pandas 中相似度的計算方法為 corr ,使用該方法計算相似度時,默認為

“pearson”法 ,可以通過“method”參數調節,目前還支持“spearman”法和“kendall”法。

注:通過相似度矩陣去重存在一個弊端,該方法隻能對數值型重複特征去重,類别型特征之間無法通過計算相似系

數來衡量相似度。

 除了使用相似度矩陣進行特征去重之外,可以通過 DataFrame.equals 方法進行特征去重。

• 檢測與處理缺失值

發現缺失值

 數據中的某個或某些特征的值是不完整的,這些值稱為缺失值

 pandas 提供了識别缺失值的方法 isnull 以及識别非缺失值的方法 notnull,這兩種方法在使用時返

回的都是布爾值,即 True和False。

 結合 sum 函數和 isnull、notnull 函isnull和notnull之間結果正好相反,因此使用其中任意一個都可

以判斷出數據中缺失值的位置數,可以檢測數據中缺失值的分布以及數據中一共含有多少缺失值

 isnull 和 notnull 之間結果正好相反,因此使用其中任意一個都可以判斷出數據中缺失值的位置

• 檢測與處理缺失值

處理缺失值——删除法

 删除法分為删除記錄和删除特征兩種,它屬于利用減少樣本量來換取信息完整度的一種方法,是一

種最簡單的缺失值處理方法。

 pandas中提供了簡便的删除缺失值的方法 dropna ,該方法既可以删除記錄,亦可以删除特征:

df.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)

• 檢測與處理缺失值

處理缺失值——替換法

 替換法是指用一個特定的值替換缺失值。

 特征可分為數值型和類别型,兩者出現缺失值時的處理方法也是不同的:

 缺失值所在特征為數值型時,通常利用其均值、中位數和衆數等描述其集中趨勢的統計量來代替缺失值

 缺失值所在特征為類别型時,則選擇使用衆數來替換缺失值

• 檢測與處理缺失值

處理缺失值——替換法

 pandas 庫中提供了缺失值替換的方法名為 fillna,其基本語法如下:

df.fillna(value=None, method=None, axis=None, inplace=False, limit=None)

• 檢測與處理缺失值

處理缺失值——插值法

删除法簡單易行,但是會引起數據結構變動,樣本減少;替換法使用難度較低,但是會影響數據的标

準差,導緻信息量變動。在面對數據缺失問題時,除了這兩種方法之外,還有一種常用的方法—插值

常用的插值法有線性插值多項式插值樣條插值等:

 線性插值是一種較為簡單的插值方法,它針對已知的值求出線性方程,通過求解線性方程得到缺失值。

 多項式插值是利用已知的值拟合一個多項式,使得現有的數據滿足這個多項式,再利用這個多項式求解缺失值,常見的多

項式插值法有拉格朗日插值和牛頓插值等。

 樣條插值是以可變樣條來作出一條經過一系列點的光滑曲線的插值方法,插值樣條由一些多項式組成,每一個多項式都是

由相鄰兩個數據點決定,這樣可以保證兩個相鄰多項式及其導數在連接處連續。

• 檢測與處理缺失值

處理缺失值——插值法

 Pandas 庫提供了 interpolate 方法實現上述插值 :

注意:依賴于 scipy 庫,需要先安裝:pip install scipy

 也可以用 scipy 的方法來實現

python pandas 數據校驗(Python數據分析五Pandas數據預處理)10

• 檢測與處理異常值

異常值是指數據中個别值的數值明顯偏離其餘的數值,有時也稱為離群點,檢測異常值就是

檢驗數據中是否有輸入錯誤以及是否含有不合理的數據。如果計算分析過程的數據中有異常

值,那麼會對結果産生不良影響,從而導緻分析結果産生偏差乃至錯誤。

常用的異常值檢測主要為:

 3σ原則

 箱線圖分析

• 檢測與處理異常值

3σ原則

 3σ原則又稱為拉依達法則。該法則就是先假設一組檢測數據隻含有

随機誤差,對原始數據進行計算處理得到标準差,然後按一定的概率

确定一個區間,認為誤差超過這個區間的就屬于異常值。

 如右圖,符合正态分布的數據集的數值分布幾乎全部集中在區間

(μ-3σ,μ 3σ)内,其中σ 代表标準差,μ 代表均值,超出這個範圍的

數據僅占不到0.3%。故根據小概率原理,可以認為超出3σ的部分數據

為異常數據。

注意:這種方法僅适用于對正态或近似正态分布的樣本數據進行處理

python pandas 數據校驗(Python數據分析五Pandas數據預處理)11

• 檢測與處理異常值

箱線圖分析

 箱型圖提供了識别異常值的一個标準,即異常值通常

被定義為小于 QL-1.5 IQR 或大于 QU 1.5 IQR 的值

• QL 稱為下四分位數,表示全部觀察值中有四分之一的

數據取值比它小。

• QU 稱為上四分位數,表示全部觀察值中有四分之一的

數據取值比它大。

• IQR 稱為四分位數間距,是上四分位數 QU 與下四分位

數 QL 之差,其間包含了全部觀察值的一半。

标準化數據

我們在進行數據分析與挖掘時,樣本的不同特征之間往往具有不同的量綱,由此所造成的數值

間的差異可能很大,在涉及空間距離計算或梯度下降法等情況時,不對其進行處理會影響到數

據分析結果的準确性。為了消除特征之間量綱和取值範圍差異可能會造成的影響,需要對數據

進行标準化處理,也可以稱作規範化處理。标準化處理有以下三種:

離差标準化

标準差标準化

小數定标标準化

• 離差标準化

離差标準化又叫 min-max 标準化,是對原始數據的一種線性變換(歸一化),将原始

數據的數值映射到 [0,1] 區間

轉換公式:

python pandas 數據校驗(Python數據分析五Pandas數據預處理)12

其中,max 為樣本數據的最大值,min 為樣本數據的最小值,max−min 為極差。離差标

準化保留了原始數據值之間的聯系,是消除量綱和數據取值範圍影響最簡單的方法

• 标準差标準化

标準差标準化又叫零均值标準化,或者 z-score 标準化,是當前使用最廣泛的數據标準

化方法。經過該方法處理後的數據均值為 0,标準差為 1。

轉化公式:

python pandas 數據校驗(Python數據分析五Pandas數據預處理)13

其中, 為樣本數據的均值, 為樣本數據的标準差。标準差标準化後的值區間不局限于

[0,1],并且存在負值

• 小數定标标準化

通過移動數據的小數點位置,将數據映射到區間[-1,1],移動的小數位數取決于數據絕對

值的最大值。

轉化公式:

例如:屬性A的取值範圍是 -800 到 70,那麼就可以将數據的小數點整體向左移三位,即

[-0.8,0.07]

轉化數據

• 類别型數據的處理

數據分析模型中有相當一部分的算法模型都要求輸入的特征為數值型,但實際數據中,特征的類型不一定隻有數值型,還會存在相當一部分的類别型,這部分的特征需要經過啞變量處理才可以放入模型之中,處理示例如下圖:

python pandas 數據校驗(Python數據分析五Pandas數據預處理)14

• 類别型數據的處理

Pandas 庫提供了 get_dummies 函數對類别型特征進行啞變量處理:

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None,

sparse=False, drop_first=False)

• 離散化連續型數據

 某些模型算法,特别是某些分類算法如 ID3 決策樹算法和 Apriori 算法等,要求數據是離散的,此時就需要将連續型特征(數值型)變換成離散型特征(類别型)。

連續特征的離散化就是在數據的取值範圍内設定若幹個離散的劃分點,将取值範圍劃分為一些離散化的區間,最後用不同的符号或整數值代表落在每個子區間中的數據值。

 常用的離散化方法主要有3種:等寬法、等頻法和聚

類分析法(一維)

python pandas 數據校驗(Python數據分析五Pandas數據預處理)15

• 離散化連續型數據

等寬法

将數據的值域分成具有相同寬度的區間,區間的個數由數據本身的特點決定或者由用

戶指定,與制作頻率分布表類似。pandas 提供了 cut 函數,可以進行連續型數據的等

寬離散化,其基礎語法格式如下:

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3,

include_lowest=False)

• 離散化連續型數據

等寬法

使用等寬法離散化的缺陷為:等寬法離散化對數據分布具有較高要求,若數據分布不

均勻,那麼各個類的數目也會變得非常不均勻,有些區間包含許多數據,而另外一些

區間的數據極少,這會嚴重損壞所建立的模型。

• 離散化連續型數據

等頻法

cut 函數雖然不能夠直接實現等頻離散化,但是可以通過定義将相同數量的記錄放進

每個區間。

等頻法離散化的方法相比較于等寬法離散化而言,避免了類分布不均勻的問題,但同

時卻也有可能将數值非常接近的兩個值分到不同的區間以滿足每個區間中固定的數據

個數。

• 離散化連續型數據

聚類分析法

一維聚類的方法包括兩個步驟:

 首先将連續型數據用聚類算法(如K-Means算法等)進行聚類,

 然後處理聚類得到的簇,為合并到一個簇的連續型數據做同一種标記。

聚類分析的離散化方法需要用戶指定簇的個數,用來決定産生的區間數。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved