日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(上)

發(fā)布時(shí)間:2024/9/16 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(上) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

導(dǎo)語(yǔ)

Python正迅速成為數(shù)據(jù)科學(xué)家偏愛(ài)的語(yǔ)言,這合情合理。它擁有作為一種編程語(yǔ)言廣闊的生態(tài)環(huán)境以及眾多優(yōu)秀的科學(xué)計(jì)算庫(kù)。如果你剛開(kāi)始學(xué)習(xí)Python,可以先了解一下Python的學(xué)習(xí)路線(xiàn)。
在眾多的科學(xué)計(jì)算庫(kù)中,我認(rèn)為Pandas對(duì)數(shù)據(jù)科學(xué)運(yùn)算最有用。Pandas,加上Scikit-learn幾乎能構(gòu)成了數(shù)據(jù)科學(xué)家所需的全部工具。 本文旨在提供Python數(shù)據(jù)處理的12種方法。文中也分享了一些會(huì)讓你的工作更加便捷的小技巧。
在繼續(xù)推進(jìn)之前,我推薦讀者閱覽一些關(guān)于數(shù)據(jù)探索 (data exploration)的代碼。
為了幫助理解,本文用一個(gè)具體的數(shù)據(jù)集進(jìn)行運(yùn)算和操作。本文使用了貸款預(yù)測(cè)(loan prediction) 問(wèn)題數(shù)據(jù)集,下載數(shù)據(jù)集請(qǐng)到 http://datahack.analyticsvidhya.com/contest/practice-problem-loan-prediction。

開(kāi)始工作

首先我要導(dǎo)入要用的模塊,并把數(shù)據(jù)集載入Python環(huán)境。

import pandas as pdimport numpy as npdata = pd.read_csv("train.csv", index_col="Loan_ID")

1.布爾索引(Boolean Indexing)

如何你想用基于某些列的條件篩選另一列的值,你會(huì)怎么做?例如,我們想要一個(gè)全部無(wú)大學(xué)學(xué)歷但有貸款的女性列表。這里可以使用布爾索引。代碼如下:

data.loc[(data["Gender"]=="Female") & (data["Education"]=="Not Graduate") & (data["Loan_Status"]=="Y"), ["Gender","Education","Loan_Status"]]

?
想了解更多請(qǐng)閱讀 Pandas Selecting and Indexing

2.Apply函數(shù)

Apply是擺弄數(shù)據(jù)和創(chuàng)造新變量時(shí)常用的一個(gè)函數(shù)。Apply把函數(shù)應(yīng)用于數(shù)據(jù)框的特定行/列之后返回一些值。這里的函數(shù)既可以是系統(tǒng)自帶的也可以是用戶(hù)定義的。例如,此處可以用它來(lái)尋找每行每列的缺失值個(gè)數(shù):

#創(chuàng)建一個(gè)新函數(shù):def num_missing(x):return sum(x.isnull())#Apply到每一列:print "Missing values per column:"print data.apply(num_missing, axis=0) #axis=0代表函數(shù)應(yīng)用于每一列#Apply到每一行:print "\nMissing values per row:"print data.apply(num_missing, axis=1).head() #axis=1代表函數(shù)應(yīng)用于每一行

輸出結(jié)果:

由此我們得到了想要的結(jié)果。
注意:第二個(gè)輸出使用了head()函數(shù),因?yàn)閿?shù)據(jù)包含太多行。
想了解更多請(qǐng)閱讀 Pandas Reference (apply)

3.替換缺失值

‘fillna()’ 可以一次解決這個(gè)問(wèn)題。它被用來(lái)把缺失值替換為所在列的平均值/眾數(shù)/中位數(shù)。

#首先導(dǎo)入一個(gè)尋找眾數(shù)的函數(shù):from scipy.stats import modemode(data['Gender'])

輸出: ModeResult(mode=array([‘Male’], dtype=object), count=array([489]))
返回了眾數(shù)及其出現(xiàn)次數(shù)。記住,眾數(shù)可以是個(gè)數(shù)組,因?yàn)楦哳l的值可能不只一個(gè)。我們通常默認(rèn)使用第一個(gè):

mode(data['Gender']).mode[0]


現(xiàn)在可以填補(bǔ)缺失值,并用上一步的技巧來(lái)檢驗(yàn)。

#值替換:data['Gender'].fillna(mode(data['Gender']).mode[0], inplace=True)data['Married'].fillna(mode(data['Married']).mode[0], inplace=True)data['Self_Employed'].fillna(mode(data['Self_Employed']).mode[0], inplace=True)#再次檢查缺失值以確認(rèn):print data.apply(num_missing, axis=0)


由此可見(jiàn),缺失值確定被替換了。請(qǐng)注意這是最基本的替換方式,其他更復(fù)雜的技術(shù),如為缺失值建模、用分組平均數(shù)(平均值/眾數(shù)/中位數(shù))填充,會(huì)在今后的文章提到。
想了解更多請(qǐng)閱讀 Pandas Reference (fillna)

4.透視表

Pandas可以用來(lái)創(chuàng)建 Excel式的透視表。例如,“LoanAmount”這個(gè)重要的列有缺失值。我們可以用根據(jù) ‘Gender’、‘Married’、‘Self_Employed’分組后的各組的均值來(lái)替換缺失值。每個(gè)組的 ‘LoanAmount’可以用如下方法確定:

#Determine pivot tableimpute_grps = data.pivot_table(values=["LoanAmount"], index=["Gender","Married","Self_Employed"], aggfunc=np.mean)print impute_grps


想了解更多請(qǐng)閱讀 Pandas Reference (Pivot Table)

5.多重索引

你可能注意到上一步驟的輸出有個(gè)奇怪的性質(zhì)。每個(gè)索引都是由三個(gè)值組合而成。這叫做多重索引。它可以幫助運(yùn)算快速進(jìn)行。
延續(xù)上面的例子,現(xiàn)在我們有了每個(gè)分組的值,但還沒(méi)有替換。這個(gè)任務(wù)可以用現(xiàn)在學(xué)過(guò)的多個(gè)技巧共同完成。

#只在帶有缺失值的行中迭代:for i,row in data.loc[data['LoanAmount'].isnull(),:].iterrows():ind = tuple([row['Gender'],row['Married'],row['Self_Employed']])data.loc[i,'LoanAmount'] = impute_grps.loc[ind].values[0]#再次檢查缺失值以確認(rèn):print data.apply(num_missing, axis=0)


注:

多重索引需要在loc中用到定義分組group的元組(tuple)。這個(gè)元組會(huì)在函數(shù)中使用。
需要使用.values[0]后綴。因?yàn)槟J(rèn)情況下元素返回的順序與原數(shù)據(jù)庫(kù)不匹配。在這種情況下,直接指派會(huì)返回錯(cuò)誤。

6. 二維表

這個(gè)功能可被用來(lái)獲取關(guān)于數(shù)據(jù)的初始“印象”(觀察)。這里我們可以驗(yàn)證一些基本假設(shè)。例如,本例中“Credit_History” 被認(rèn)為對(duì)欠款狀態(tài)有顯著影響。可以用下面這個(gè)二維表進(jìn)行驗(yàn)證:

pd.crosstab(data["Credit_History"],data["Loan_Status"],margins=True)


這些數(shù)字是絕對(duì)數(shù)值。不過(guò),百分比數(shù)字更有助于快速了解數(shù)據(jù)。我們可以用apply函數(shù)達(dá)到目的:

def percConvert(ser):return ser/float(ser[-1])pd.crosstab(data["Credit_History"],data["Loan_Status"],margins=True).apply(percConvert, axis=1)


現(xiàn)在可以很明顯地看出,有信用記錄的人獲得貸款的可能性更高:有信用記錄的人有80% 獲得了貸款,沒(méi)有信用記錄的人只有 9% 獲得了貸款。
但不僅僅是這樣,其中還包含著更多信息。由于我現(xiàn)在知道了有信用記錄與否非常重要,如果用信用記錄來(lái)預(yù)測(cè)是否會(huì)獲得貸款會(huì)怎樣?令人驚訝的是,在614次試驗(yàn)中我們能預(yù)測(cè)正確460次,足足有75%!
如果此刻你在納悶,我們要統(tǒng)計(jì)模型有什么用,我不會(huì)怪你。但相信我,在此基礎(chǔ)上提高0.001%的準(zhǔn)確率都是充滿(mǎn)挑戰(zhàn)性的。你是否愿意接受這個(gè)挑戰(zhàn)?
注:對(duì)訓(xùn)練集而言是75% 。在測(cè)試集上有些不同,但結(jié)果相近。同時(shí),我希望這個(gè)例子能讓人明白,為什么提高0.05% 的正確率就能在Kaggle排行榜上跳升500個(gè)名次。
想了解更多請(qǐng)閱讀Pandas Reference (crosstab)

感謝您閱讀到這里,在下一篇文章中將繼續(xù)為您介紹其余六個(gè)實(shí)用技巧,請(qǐng)持續(xù)關(guān)注數(shù)據(jù)工匠。
原作者:AARSHAY JAIN?
翻譯:王鵬宇
原文地址:
http://www.analyticsvidhya.com/blog/2016/01/12-pandas-techniques-python-data-manipulation/


總結(jié)

以上是生活随笔為你收集整理的用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。