python数据预处理 重复行统计_Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记...
1. 數(shù)據(jù)清洗
1.1 空值和缺失值的處理
?空值一般表示數(shù)據(jù)未知、不適用或?qū)⒃谝院筇砑訑?shù)據(jù)。缺失值是指數(shù)據(jù)集中某個或某些屬性的值是不完整的。
?一般空值使用None表示,缺失值使用NaN表示
1.1.1 使用isnull()和notnull()函數(shù)
?可以判斷數(shù)據(jù)集中是否存在空值和缺失值
1.1.1.1 isnull()語法格式:
pandas . isnull(obj)
1.1.1.2 notnull()語法格式:
pandas . notnull(obj)
?notnull()與 isnull()函數(shù)的功能是一樣的,都可以判斷數(shù)據(jù)中是否存在空值或缺失值,不同處在于,前者發(fā)現(xiàn)數(shù)據(jù)中有空值或缺失值時返回False,后者返回的是True.
1.1.2 使用 dropna()和fillna()方法
?對缺失值進行刪除和填充。
1.1.2.1 dropna()刪除含有空值或缺失值的行或列
?axis:確定過濾行或列
?how:確定過濾的標準,默認是‘a(chǎn)ny’
?inplase::False=不修改對象本身
1.1.2.2 fillna()方法可以實現(xiàn)填充空值或者缺失值
?value:用于填充的數(shù)值,
?method:表示填充方式,默認值為None,‘ffill’前填充,‘bfill’后填充
?limit:可以連續(xù)填充的最大數(shù)量,默認None.
1.2 重復值的處理
?當數(shù)據(jù)中出現(xiàn)了重復值,在大多數(shù)情況下需要進行刪除。
1.2.1 使用duplicated()和drop_duplicates()方法
?duplicated()方法用于標記是否有重復值。
?drop_duplicates()方法用于刪除重復值。
?它們的判斷標準是一樣的,即只要兩條數(shù)中所有條目的值完全相等,就判斷為重復值。
1.2.2 duplicated()方法的語法格式
?subset:用于識別重復的列標簽或列標簽序列,默認識別所有的列標簽。
?keep:刪除重復項并保留第一次出現(xiàn)的項取值可以為 first、last或 False
?duplicated()方法用于標記 Pandas對象的數(shù)據(jù)是否重復,重復則標記為True,不重復則標記為False,所以該方法返回一個由布爾值組成的Series對象,它的行索引保持不變,數(shù)據(jù)則變?yōu)闃擞浀牟紶栔?/p>
強調(diào)注意:
?(1)只有數(shù)據(jù)表中兩個條目間所有列的內(nèi)容都相等時,duplicated()方法才會判斷為重復值。
?(2)duplicated()方法支持從前向后( first)和從后向前(last)兩種重復值查找模式,默認是從前向后查找判斷重復值的。換句話說,就是將后出現(xiàn)的相同條目判斷為重復值。
1.2.2.1 drop_duplicates()方法的語法格式
2上述方法中, inplace參數(shù)接收一個布爾類型的值,表示是否替換原來的數(shù)據(jù),默認為False.
1.3 異常值的處理
?異常值是指樣本中的個別值,其數(shù)值明顯偏離它所屬樣本的其余觀測值,這些數(shù)值是不合理的或錯誤的。
1.3.1 常用的檢測方法有3σ原則(拉依達準則)和箱形圖
?3σ原則是基于正態(tài)分布的數(shù)據(jù)檢洳而箱形圖沒有什么嚴格的要求,可以檢測任意一組數(shù)據(jù),
1.3.1.1 3σ原則
?是指假設一組檢測數(shù)據(jù)只含有隨機誤差,對其進行計算處理得到標準偏差,按一定概率確定一個區(qū)間,凡是超過這個區(qū)間的誤差都是粗大誤差,在此誤差的范圍內(nèi)的數(shù)據(jù)應予以剔除。
?數(shù)值幾乎全部集中在(μ-3σ,μ+3σ)]區(qū)間內(nèi),超出這個范圍的可能性僅占不到0.3%.所以,凡是誤差超過這個區(qū)間的就屬于異常值,應予以剔除
def three_sidma(ser):# ser 為數(shù)據(jù)的列
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 箱形圖
?箱開圖是一種用作顯示一組數(shù)據(jù)分散情況的統(tǒng)計圖。在箱形圖中,異常值通常被定義為小于QL-15QR或大于QU+1.5IQR的值。
?(1)QL稱為下四分位數(shù),表示全部觀察中四分之一的數(shù)據(jù)取值比它小
?(2)QU稱為上四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它大
?(3)IQR稱為四分位數(shù)間距,是上四分位數(shù)0與下四分位數(shù)則之差,其間包含了全部觀察值的一半。
?離散點表示的是異常值,上界表示除異常值以外數(shù)據(jù)中最大值;下界表示除異常值以外數(shù)據(jù)中最小值。
boxplot()方法,專門用來繪制箱形圖。
?檢測出異常值后,通常會采用如下四種方式處理這些異常值
?a)直接將含有異常值的記錄刪除。
?b)用具體的值來進行替換,可用前后兩個觀測值的平均值修正該異常值
?c)不處理,直接在具有異常值的數(shù)據(jù)集上進行統(tǒng)計分析
?d)視為缺失值,利用缺失值的處理方法修正該異常值。
?如果希望對異常值進行修改,則可以使用replace()方法進行替換,該方法不僅可以對單個數(shù)據(jù)進行替換,也可以多個數(shù)據(jù)執(zhí)行批量替換操作。
?to_replace:表示查找被替換值的方式
?value:用來替換任何匹配 to_replace的值,默認值None.
1.4 更改數(shù)據(jù)類型
?在處理數(shù)據(jù)時,可能會遇到數(shù)據(jù)類型不一致的問題。例如,通過爬蟲采集到的數(shù)據(jù)都是整型的數(shù)據(jù),在使用數(shù)據(jù)時希望保留兩位小數(shù)點,這時就需要將數(shù)據(jù)的類型轉(zhuǎn)換成浮點型。
?創(chuàng)建 Pandas數(shù)據(jù)對象時,如果沒有明確地指出數(shù)據(jù)的類型,則可以根據(jù)傳入的數(shù)據(jù)推斷出來并且通過 dtypes屬性進行查看。
1.4.1 在使用構造方法中的 dtype參數(shù)指定數(shù)據(jù)類型
1.4.2 通過 astype()方法可以強制轉(zhuǎn)換數(shù)據(jù)的類型。
?dtype:表示數(shù)據(jù)的類型。
?errors:錯誤采取的處理方式,可以取值為 raise或 ignore.其中, raise表示允許引發(fā)異常ignore表示抑制異常,默認為 raise.
?astype()方法存在著一些局限性,只要待轉(zhuǎn)換的數(shù)據(jù)中存在非數(shù)字以外的字符,在使用 astype()方法進行類型轉(zhuǎn)換時就會出現(xiàn)錯誤,而to_numeric()函數(shù)的出現(xiàn)正好解決了這個問題。
1.4.3 to_numeric()函數(shù)可以將傳入的參數(shù)轉(zhuǎn)換為數(shù)值類型。
arg:表示要轉(zhuǎn)換的數(shù)據(jù),可以是list、tuple、 Series.
errors:表示錯誤采取的處理方式。
2. 數(shù)據(jù)合并
2.1軸向堆疊數(shù)據(jù)
2.1.1 concat()函數(shù)
?concat()函數(shù)可以沿著一條軸將多個對象進行堆疊,其使用方式類似數(shù)據(jù)庫中的數(shù)據(jù)表合并。
axis:表示連接的軸向,可以為0或1,默認為0
join:表示連接的方式,inner表示內(nèi)連接, outer表示外連接默認使用外連接。
i gnore_index:如果設置為True,清除現(xiàn)有索引并重置索引值。
names:結(jié)果分層索引中的層級的名稱。
?根據(jù)軸方向的不同,可以將堆疊分成橫向堆疊與縱向堆疊,默認采用的是縱向堆疊方式。
?在堆疊數(shù)據(jù)時,默認采用的是外連接(join參數(shù)設為 outer)的方式進行合并,當然也可以通過join=inner設置為內(nèi)連接的方式。
2.2 主鍵合并數(shù)據(jù)
?主鍵合并類似于關系型數(shù)據(jù)庫的連接方式,它是指根據(jù)個或多個鍵將不同的 DataFrame對象連接起來,大多數(shù)是將兩個 DataFrame對象中重疊的列作為合并的鍵。
2.2.1 merge()函數(shù)
left:參與合并的左側(cè) DataFrame對象。
right:參與合并的右側(cè) DataFrame對象。
how:表示連接方式,默認為 inner。
2.2.1.1 how參數(shù)可以取下列值
left:使用左側(cè)的 DataFrame的鍵,類似SQL的左外連接
right:使用右側(cè)的 DataFrame的鍵,類似SQL的右外連接
outer:使用兩個 DataFrame所有的鍵,類似SQL的全連接。
inner:使用兩個 DataFrame鍵的交集,類似SQL的內(nèi)連接
?在使用 merge()函數(shù)進行合并時,默認會使用重疊的列索引做為合并鍵,并采用內(nèi)連接方式合并數(shù)據(jù),即取行索引重疊的部分。
?merge()函數(shù)還支持對含有多個重疊列的 Data frame對象進行合并。
?使用外連接的方式將 left與right進行合并時,列中相同的數(shù)據(jù)會重疊,沒有數(shù)據(jù)的位置使用NaN進行填充。
2.3 根據(jù)行索引合并數(shù)據(jù)
?join()方法能夠通過索引或指定列來連接多個DataFrame對象
2.3.1 join()方法
on:名稱,用于連接列名。
how:可以從{'left‘,’right',' outer‘,'inner'}中任選一個,默認使用左連接的方式。
sort:根據(jù)連接鍵對合并的數(shù)據(jù)進行排序,默認為 False.
2.4 合并重疊數(shù)據(jù)
?當DataFrame對象中出現(xiàn)了缺失數(shù)據(jù),而我們希望使用其他 DataFrame對象中的數(shù)據(jù)填充缺失數(shù)據(jù),則可以通過 combine_first()方法為缺失數(shù)據(jù)填充。
2.4.1 combine_first()方法
上述方法中只有一個參數(shù) other,該參數(shù)用于接收填充缺失值的 DataFrame對象。
注意:使用combine_first()方法合并兩個DataFrame對象時,必須確保它們的行索引和列索引有重疊的部分
3. 數(shù)據(jù)重塑
3.1 重塑層次化索引
?Pandas中重塑層次化索引的操作主要是 stack()方法和 unstack()方法,前者是將數(shù)據(jù)的列“旋轉(zhuǎn)”為行,后者是將數(shù)據(jù)的行“旋轉(zhuǎn)”為列。
3.1.1 stack()方法
stack()方法可以將數(shù)據(jù)的列索引轉(zhuǎn)換為行索引。
level:默認為-1,表示操作內(nèi)層索引。若設為0,表示操作外層索引。
dropna:表示是否將旋轉(zhuǎn)后的缺失值刪除,若設為True,則表示自動過濾缺失值,設置為 False則相反。
3.1.2 unstack()方法
unstack()方法可以將數(shù)據(jù)的行索引轉(zhuǎn)換為列索引
level:默認為-1,表示操作內(nèi)層索引,0表示操作外層索引。
fill_value:若產(chǎn)生了缺失值,則可以設置這個參數(shù)用來替換NaN。
3.2 軸向旋轉(zhuǎn)
?在 Pandas中pivot()方法提供了這樣的功能,它會根據(jù)給定的行或列索引重新組織一個 DataFrame對象。
3.2.1 pivot()方法
index:用于創(chuàng)建新 DataFrame對象的行索引。
columns:用于創(chuàng)建新 DataFrame對象的列索引
values:用于填充新 DataFrame對象中的值。
4. 數(shù)據(jù)轉(zhuǎn)換
4.1 重命名軸索引
Pandas中提供了一個rename()方法來重命名個別列索引或行索引的標簽或名稱。
4.1.1 rename()方法
index,columns:表示對行索引名或列索引名的轉(zhuǎn)換。
inplace:默認為False,表示是否返回新的Pandas對象。
4.2 離散化連續(xù)數(shù)據(jù)
Pandas 的 cut ()函數(shù)能夠?qū)崿F(xiàn)離散化操作。
4.2.1 cut ()函數(shù)
x:表示要分箱的數(shù)組,必須是一維的。
bins:接收int和序列類型的數(shù)據(jù)。(序列劃分區(qū)間)
right:是否包含右端點,決定區(qū)間的開閉,默認為True。
?cut()函數(shù)會返回一個Categorical對象,我們可以將其看作一組表示 面元名稱 的字符串,它包含了分組的數(shù)量以及不同分類的名稱。
?Categories對象中的區(qū)間范圍跟數(shù)學符號中的“區(qū)間”一樣,都是用圓括號表示開區(qū)間,用方括號則表示閉區(qū)間。
ages=[18,22,25,27,21,23,37,31,60,45,82]
bins=[0,18,25,50,60,100] # bins是一個序列,劃分區(qū)間
cuts=pd.cut(ages,bins)
cuts
設置左閉右開區(qū)間,則可以在調(diào)用cut()函數(shù)時傳入right=False進行修改。
# 如果希望設置左右開區(qū)間,則可以在調(diào)用cut函數(shù)時傳入right= False進行修改。
pd.cut(ages,bins=bins,right=False)
# 可以在調(diào)用cut函數(shù)時指定labels= 用干生成區(qū)間的標簽
pd.cut(ages,bins=bins,labels=['少年','青年','中年','中老年','老年'])
4.3 啞變量處理類別型數(shù)據(jù)
在Pandas中,可以使用get_dummies()函數(shù)對類別特征進行啞變量處理.
4.3.1 get_dummies()函數(shù)
data:表示啞變量處理的數(shù)據(jù)。
prefix:表示列名的前綴,默認為None。(‘col’)
prefix_sep:用于附加前綴作為分隔符使用,默認為“_”。
?啞變量又稱應擬變量,名義變量,從名稱上看就知道,它是人為虛設的變量,用來反映某個交量的不間類別
?使用啞變最處理類別轉(zhuǎn)換,事實上就是將分類變量轉(zhuǎn)換為啞變最矩陣或指標矩陣,矩陣的值通常用“0”或“1”表示df1=pd.DataFrame({'職業(yè)':['工人','學生','司機','教師','導游']})
# get_dummies()對類別特進行啞變量處理
pd.get_dummies(df1)
pd.get_dummies(df1,prefix=['col'])
4.3.2 cut()函數(shù)與get_dummies()函數(shù)的混合使用
ret=pd.cut(ages,bins=bins,right=False,
labels=['少年','青年','中年','中老年','老年'])
pd.get_dummies(ret,prefix='年齡類別',prefix_sep=':')
總結(jié)
以上是生活随笔為你收集整理的python数据预处理 重复行统计_Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java cas原理_Java并发之原子
- 下一篇: 关于python语言和人工智能下哪个说法