python數據預處理 重復行統計_Python數據分析之數據預處理(數據清洗、數據合并、數據重塑、數據轉換)學習筆記...

1. 數據清洗

1.1 空值和缺失值的處理

?空值一般表示數據未知、不適用或將在以后添加數據。缺失值是指數據集中某個或某些屬性的值是不完整的。

?一般空值使用None表示,缺失值使用NaN表示

1.1.1 使用isnull()和notnull()函數

?可以判斷數據集中是否存在空值和缺失值

1.1.1.1 isnull()語法格式:

pandas . isnull(obj)

1.1.1.2 notnull()語法格式:

pandas . notnull(obj)

?notnull()與 isnull()函數的功能是一樣的,都可以判斷數據中是否存在空值或缺失值,不同處在于,前者發現數據中有空值或缺失值時返回False,后者返回的是True.

1.1.2 使用 dropna()和fillna()方法

?對缺失值進行刪除和填充。

1.1.2.1 dropna()刪除含有空值或缺失值的行或列

?axis:確定過濾行或列

?how:確定過濾的標準,默認是‘any’

?inplase::False=不修改對象本身

1.1.2.2 fillna()方法可以實現填充空值或者缺失值

?value:用于填充的數值,

?method:表示填充方式,默認值為None,‘ffill’前填充,‘bfill’后填充

?limit:可以連續填充的最大數量,默認None.

1.2 重復值的處理

?當數據中出現了重復值,在大多數情況下需要進行刪除。

1.2.1 使用duplicated()和drop_duplicates()方法

?duplicated()方法用于標記是否有重復值。

?drop_duplicates()方法用于刪除重復值。

?它們的判斷標準是一樣的,即只要兩條數中所有條目的值完全相等,就判斷為重復值。

1.2.2 duplicated()方法的語法格式

?subset:用于識別重復的列標簽或列標簽序列,默認識別所有的列標簽。

?keep:刪除重復項并保留第一次出現的項取值可以為 first、last或 False

?duplicated()方法用于標記 Pandas對象的數據是否重復,重復則標記為True,不重復則標記為False,所以該方法返回一個由布爾值組成的Series對象,它的行索引保持不變,數據則變為標記的布爾值

強調注意:

?(1)只有數據表中兩個條目間所有列的內容都相等時,duplicated()方法才會判斷為重復值。

?(2)duplicated()方法支持從前向后( first)和從后向前(last)兩種重復值查找模式,默認是從前向后查找判斷重復值的。換句話說,就是將后出現的相同條目判斷為重復值。

1.2.2.1 drop_duplicates()方法的語法格式

2上述方法中, inplace參數接收一個布爾類型的值,表示是否替換原來的數據,默認為False.

1.3 異常值的處理

?異常值是指樣本中的個別值,其數值明顯偏離它所屬樣本的其余觀測值,這些數值是不合理的或錯誤的。

1.3.1 常用的檢測方法有3σ原則(拉依達準則)和箱形圖

?3σ原則是基于正態分布的數據檢洳而箱形圖沒有什么嚴格的要求,可以檢測任意一組數據,

1.3.1.1 3σ原則

?是指假設一組檢測數據只含有隨機誤差,對其進行計算處理得到標準偏差,按一定概率確定一個區間,凡是超過這個區間的誤差都是粗大誤差,在此誤差的范圍內的數據應予以剔除。

?數值幾乎全部集中在(μ-3σ,μ+3σ)]區間內,超出這個范圍的可能性僅占不到0.3%.所以,凡是誤差超過這個區間的就屬于異常值,應予以剔除

def three_sidma(ser):# ser 為數據的列

mean_value=ser.mean()# 平均值

std_value=ser.std()# 標準值

rule=(sermean_value+3*std_value)

index=np.arange(ser.shape[0])[rule]

outrange=ser.iloc[index]

return outrange

1.3.1.2 箱形圖

?箱開圖是一種用作顯示一組數據分散情況的統計圖。在箱形圖中,異常值通常被定義為小于QL-15QR或大于QU+1.5IQR的值。

?(1)QL稱為下四分位數,表示全部觀察中四分之一的數據取值比它小

?(2)QU稱為上四分位數,表示全部觀察值中有四分之一的數據取值比它大

?(3)IQR稱為四分位數間距,是上四分位數0與下四分位數則之差,其間包含了全部觀察值的一半。

?離散點表示的是異常值,上界表示除異常值以外數據中最大值;下界表示除異常值以外數據中最小值。

boxplot()方法,專門用來繪制箱形圖。

?檢測出異常值后,通常會采用如下四種方式處理這些異常值

?a)直接將含有異常值的記錄刪除。

?b)用具體的值來進行替換,可用前后兩個觀測值的平均值修正該異常值

?c)不處理,直接在具有異常值的數據集上進行統計分析

?d)視為缺失值,利用缺失值的處理方法修正該異常值。

?如果希望對異常值進行修改,則可以使用replace()方法進行替換,該方法不僅可以對單個數據進行替換,也可以多個數據執行批量替換操作。

?to_replace:表示查找被替換值的方式

?value:用來替換任何匹配 to_replace的值,默認值None.

1.4 更改數據類型

?在處理數據時,可能會遇到數據類型不一致的問題。例如,通過爬蟲采集到的數據都是整型的數據,在使用數據時希望保留兩位小數點,這時就需要將數據的類型轉換成浮點型。

?創建 Pandas數據對象時,如果沒有明確地指出數據的類型,則可以根據傳入的數據推斷出來并且通過 dtypes屬性進行查看。

1.4.1 在使用構造方法中的 dtype參數指定數據類型

1.4.2 通過 astype()方法可以強制轉換數據的類型。

?dtype:表示數據的類型。

?errors:錯誤采取的處理方式,可以取值為 raise或 ignore.其中, raise表示允許引發異常ignore表示抑制異常,默認為 raise.

?astype()方法存在著一些局限性,只要待轉換的數據中存在非數字以外的字符,在使用 astype()方法進行類型轉換時就會出現錯誤,而to_numeric()函數的出現正好解決了這個問題。

1.4.3 to_numeric()函數可以將傳入的參數轉換為數值類型。

arg:表示要轉換的數據,可以是list、tuple、 Series.

errors:表示錯誤采取的處理方式。

2. 數據合并

2.1軸向堆疊數據

2.1.1 concat()函數

?concat()函數可以沿著一條軸將多個對象進行堆疊,其使用方式類似數據庫中的數據表合并。

axis:表示連接的軸向,可以為0或1,默認為0

join:表示連接的方式,inner表示內連接, outer表示外連接默認使用外連接。

i gnore_index:如果設置為True,清除現有索引并重置索引值。

names:結果分層索引中的層級的名稱。

?根據軸方向的不同,可以將堆疊分成橫向堆疊與縱向堆疊,默認采用的是縱向堆疊方式。

?在堆疊數據時,默認采用的是外連接(join參數設為 outer)的方式進行合并,當然也可以通過join=inner設置為內連接的方式。

2.2 主鍵合并數據

?主鍵合并類似于關系型數據庫的連接方式,它是指根據個或多個鍵將不同的 DataFrame對象連接起來,大多數是將兩個 DataFrame對象中重疊的列作為合并的鍵。

2.2.1 merge()函數

left:參與合并的左側 DataFrame對象。

right:參與合并的右側 DataFrame對象。

how:表示連接方式,默認為 inner。

2.2.1.1 how參數可以取下列值

left:使用左側的 DataFrame的鍵,類似SQL的左外連接

right:使用右側的 DataFrame的鍵,類似SQL的右外連接

outer:使用兩個 DataFrame所有的鍵,類似SQL的全連接。

inner:使用兩個 DataFrame鍵的交集,類似SQL的內連接

?在使用 merge()函數進行合并時,默認會使用重疊的列索引做為合并鍵,并采用內連接方式合并數據,即取行索引重疊的部分。

?merge()函數還支持對含有多個重疊列的 Data frame對象進行合并。

?使用外連接的方式將 left與right進行合并時,列中相同的數據會重疊,沒有數據的位置使用NaN進行填充。

2.3 根據行索引合并數據

?join()方法能夠通過索引或指定列來連接多個DataFrame對象

2.3.1 join()方法

on:名稱,用于連接列名。

how:可以從{'left‘,’right',' outer‘,'inner'}中任選一個,默認使用左連接的方式。

sort:根據連接鍵對合并的數據進行排序,默認為 False.

2.4 合并重疊數據

?當DataFrame對象中出現了缺失數據,而我們希望使用其他 DataFrame對象中的數據填充缺失數據,則可以通過 combine_first()方法為缺失數據填充。

2.4.1 combine_first()方法

上述方法中只有一個參數 other,該參數用于接收填充缺失值的 DataFrame對象。

注意:使用combine_first()方法合并兩個DataFrame對象時,必須確保它們的行索引和列索引有重疊的部分

3. 數據重塑

3.1 重塑層次化索引

?Pandas中重塑層次化索引的操作主要是 stack()方法和 unstack()方法,前者是將數據的列“旋轉”為行,后者是將數據的行“旋轉”為列。

3.1.1 stack()方法

stack()方法可以將數據的列索引轉換為行索引。

level:默認為-1,表示操作內層索引。若設為0,表示操作外層索引。

dropna:表示是否將旋轉后的缺失值刪除,若設為True,則表示自動過濾缺失值,設置為 False則相反。

3.1.2 unstack()方法

unstack()方法可以將數據的行索引轉換為列索引

level:默認為-1,表示操作內層索引,0表示操作外層索引。

fill_value:若產生了缺失值,則可以設置這個參數用來替換NaN。

3.2 軸向旋轉

?在 Pandas中pivot()方法提供了這樣的功能,它會根據給定的行或列索引重新組織一個 DataFrame對象。

3.2.1 pivot()方法

index:用于創建新 DataFrame對象的行索引。

columns:用于創建新 DataFrame對象的列索引

values:用于填充新 DataFrame對象中的值。

4. 數據轉換

4.1 重命名軸索引

Pandas中提供了一個rename()方法來重命名個別列索引或行索引的標簽或名稱。

4.1.1 rename()方法

index,columns:表示對行索引名或列索引名的轉換。

inplace:默認為False,表示是否返回新的Pandas對象。

4.2 離散化連續數據

Pandas 的 cut ()函數能夠實現離散化操作。

4.2.1 cut ()函數

x:表示要分箱的數組,必須是一維的。

bins:接收int和序列類型的數據。(序列劃分區間)

right:是否包含右端點,決定區間的開閉,默認為True。

?cut()函數會返回一個Categorical對象,我們可以將其看作一組表示 面元名稱 的字符串,它包含了分組的數量以及不同分類的名稱。

?Categories對象中的區間范圍跟數學符號中的“區間”一樣,都是用圓括號表示開區間,用方括號則表示閉區間。

ages=[18,22,25,27,21,23,37,31,60,45,82]

bins=[0,18,25,50,60,100] # bins是一個序列,劃分區間

cuts=pd.cut(ages,bins)

cuts

設置左閉右開區間,則可以在調用cut()函數時傳入right=False進行修改。

# 如果希望設置左右開區間,則可以在調用cut函數時傳入right= False進行修改。

pd.cut(ages,bins=bins,right=False)

# 可以在調用cut函數時指定labels= 用干生成區間的標簽

pd.cut(ages,bins=bins,labels=['少年','青年','中年','中老年','老年'])

4.3 啞變量處理類別型數據

在Pandas中,可以使用get_dummies()函數對類別特征進行啞變量處理.

4.3.1 get_dummies()函數

data:表示啞變量處理的數據。

prefix:表示列名的前綴,默認為None。(‘col’)

prefix_sep:用于附加前綴作為分隔符使用,默認為“_”。

?啞變量又稱應擬變量,名義變量,從名稱上看就知道,它是人為虛設的變量,用來反映某個交量的不間類別

?使用啞變最處理類別轉換,事實上就是將分類變量轉換為啞變最矩陣或指標矩陣,矩陣的值通常用“0”或“1”表示df1=pd.DataFrame({'職業':['工人','學生','司機','教師','導游']})

# get_dummies()對類別特進行啞變量處理

pd.get_dummies(df1)

pd.get_dummies(df1,prefix=['col'])

4.3.2 cut()函數與get_dummies()函數的混合使用

ret=pd.cut(ages,bins=bins,right=False,

labels=['少年','青年','中年','中老年','老年'])

pd.get_dummies(ret,prefix='年齡類別',prefix_sep=':')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533591.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533591.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java編寫系統登錄界面_java 登陸界面怎么寫,連接數據庫后

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓界面是package 界面類;import javax.jws.soap.SOAPBinding.Use;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing…

python如何復制oracle數據_Python使用cx_Oracle模塊將oracle中數據導出到csv文件的方法...

本文實例講述了Python使用cx_Oracle模塊將oracle中數據導出到csv文件的方法。分享給大家供大家參考。具體實現方法如下:# Export Oracle database tables to CSV files# FB36 - 201007117import sysimport csvimport cx_Oracleconnection raw_input("Enter Or…

JAVA構造函數是不是封裝_Java 封裝與構造函數

面向對象思想思想的三個特征:封裝,繼承,多態。封裝:表現:函數就是一個最基本的封裝體,類也是一個封裝體。好處:1、提高了代碼的復用性,2、隱藏了實現細節,可以對外提供可…

python獲取mysql數據為excel中的sheet_python 從excel、csv、mysql、txt獲取數據源

使用python進行數據分析工作的第一步是獲取數據源,數據源來可能來自于excel、txt、csv文件、mysql數據庫。分別看看這些數據源怎么導入到python中。1. Excel 數據源導入python首先導入pandas 模塊import pandas as pdexcel 導入格式為:pd.read_excel( 路…

我的世界seus光影java版下載_我的世界0.17SEUS PE光影材質包(水反高清)下載

我的世界0.17SEUS PE光影材質包已經震撼發布,隨著我的世界pe0.17系列版本瘋狂的出現,很多玩家都有點開始不適應了,畢竟這個更新的頻率和速度太快了,0.16.0版本還沒有玩夠了,下面給大家提供我的世界0.17SEUS PE光影材質…

針式打印機風格英文字體_可愛漂亮的圣誕節和新年賀卡藝術字體推薦!

圣誕節即將到來,各種相應的促銷活動和宴會搞起來,今天macz小編為您帶來幾款風格可愛漂亮的圣誕節和新年賀卡藝術字體推薦!可以用于卡片、海報、邀請函、徽標、產品介紹、T恤等,效果魅力非常哦!可愛漂亮的圣誕節和新年賀…

golang mysql curd_用 golang 造了個 curd api 的輪子

最近需要寫個接口的項目 準備順便熟悉一下 golang在 github 找了下 golang 的 resetful 接口項目 大部分需要對每張表定義一個 model 文件所以就造了個輪子 不需要定義 model 類型的 curd 接口基于 gin 框架 只支持 mysql只需要改下 config/db.go 數據庫配置文件就能直接 go ru…

miniui展示日歷能點擊_2020年日歷設計,除了366天有新字體,還有新形式

點擊上方藍字,把我設置為星標☆吧今天是12月1日,距離2020年還有最后一個月。在我們度過的日子中,我們應該銘記每一天,每一個日子。講究儀式感的人,才是生活真正的智者。那么,對于2020年的日歷,應…

fopen php 讀取_PHP使用fopen與file_get_contents讀取文件實例分享

php中讀取文件可以使用fopen和file_get_contents這兩個函數,二者之間沒有本質區別,只是前者讀取文件的php代碼相比后者要復雜一點。本文章通過實例向大家講解fopen和file_get_contents讀取文件的實現代碼。需要的碼農可以參考一下。fopen讀取文件的代碼如…

php外部對象如何使用方法,php面向對象全攻略 (三)特殊的引用“$this”的使用...

7.特殊的引用“$this”的使用現在我們知道了如何訪問對象中的成員,是通過“對象->成員”的方式訪問的,這是在對象的外部去訪問對象中成員的形式,那么如果我想在對象的內部,讓對象里的方法訪問本對象的屬性,或是對象…

python編程制作接金幣游戲_一個簡單的pygame接金幣游戲

左右鍵控制小人移動去接空中下來的金幣,接住金幣得5分,接不住游戲結束,金幣速度會隨著level的關數而越來越快import pygame,sys,os,randompygame.init()class rect():#畫出小人def __init__(self,filename,initial_position):self.imagepygam…

php 126怎么設置發送郵箱驗證碼,phpmailer發送網易126郵箱的例子

本文介紹下,使用phpmailer發送網易126.com郵件的例子,有需要的朋友參考下。使用PHPMailer類發郵件的例子:IsSMTP();//郵件服務器$mail->Host "smtp.126.com";$mail->SMTPDebug 0;//使用SMPT驗證$mail->SMTPAuth true;/…

容器中apscheduler不執行_APScheduler:定時任務框架

APScheduler:定時任務框架安裝文檔: https://apscheduler.readthedocs.io/en/stable/userguide.html安裝$ pip install apscheduler>>> import apscheduler>>> apscheduler.version3.6.3組件APScheduler由一下四部分組成triggers:觸發器,指定定時任務執行的時…

nginx php image,[Docker]應該把 nginx 和 PHP 放在一個 image 里還是分開?

因為老板想搞 K8S,但是我連 Docker 都不懂,就覺得還是要學一點點 Docker 的,之前還是看了一點點的,甚至折騰過一個開發環境的方案,但是,很長時間不弄了以后,就全都還回去了。這次我又想自己搭建…

python pep8模塊_讀懂PEP8,讓你的Python代碼更加優雅

PEP8《8 號 Python 增強規范》(Python Enhacement Proposal #8),簡稱PEP8通俗的來講 PEP8 是針對 python 代碼格式而編訂的風格指南,令代碼更加易讀易懂。像谷歌這樣的大公司是有自己內部的風格規范Google Style,目的就是為了提高開發效率。據…

python數值模擬教程_數值模擬必備random模塊

該模塊實現了各種分布的偽隨機數生成器。可以在區間內抽取一個隨機數,可以在列表中抽取一個元素,可以從分布中抽取樣本 。random模塊不能直接訪問,需要導入 random 模塊,然后通過 random 靜態對象調用該方法。import random1 生成…

php版本哪個沒有面向對象,php面向對象的方法重載兩種版本比較

多個函數用同一個名字,但參數表,即參數的個數或(和)數據類型可以不同,調用的時候,雖然方法名字相同,但根據參數表可以自動調用對應的函數。PHP4 中僅僅實現了面向對象的部分的、簡單的功能,而 PHP5 以后對對…

python實現錄音小程序 界面_小程序如何實現錄音 播放功能

第二步:編輯文件首先在src下創建一個test包并在test包下新建一個類MyRecord具體步驟代碼如下所示:package test;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;import javax.sound.sampled.*;public class MyRecord…

織夢php網站修改教程,織夢DEDEcms織夢軟件模型增加圖集功能教程(含修改文件下載)...

這篇文章主要為大家詳細介紹了織夢DEDEcms織夢軟件模型增加圖集功能教程(含修改文件下載),具有一定的參考價值,感興趣的小伙伴們可以參考一下,有需要的朋友可以收藏方便以后借鑒。織夢DEDEcms織夢軟件模型增加圖集功能,這是今天361模板要給大家分享的。下…

python自動截圖發送郵件_PhantomJS按尺寸截取頁面,并用python發送郵件

前言:當前有個任務是要把幾個網站的日志返回狀態碼進行匯總,用餅圖展示,并每天發送郵件。一、分析問題畫出餅圖,這個我用kibana給畫出來了,下面不做講解;截取餅圖,因為kibana是用js展示出來的&a…