用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(下)
點(diǎn)擊打開鏈接
7 – 數(shù)據(jù)框合并
當(dāng)我們有收集自不同來源的數(shù)據(jù)時(shí),合并數(shù)據(jù)框就變得至關(guān)重要。假設(shè)對于不同的房產(chǎn)類型,我們有不同的房屋均價(jià)數(shù)據(jù)。讓我們定義這樣一個(gè)數(shù)據(jù)框:
prop_rates = pd.DataFrame([1000, 5000, 12000], index=['Rural','Semiurban','Urban'],columns=['rates'])prop_rates
現(xiàn)在可以把它與原始數(shù)據(jù)框合并:
這張透視表驗(yàn)證了合并成功。注意這里的 ‘values’無關(guān)緊要,因?yàn)槲覀冎皇菃渭冇?jì)數(shù)。
想了解更多請閱讀Pandas Reference (merge)
8 – 給數(shù)據(jù)框排序
Pandas可以輕松基于多列排序。方法如下:
data_sorted = data.sort_values(['ApplicantIncome','CoapplicantIncome'], ascending=False)data_sorted[['ApplicantIncome','CoapplicantIncome']].head(10)
注:Pandas 的“sort”函數(shù)現(xiàn)在已經(jīng)不推薦使用,我們用 “sort_values”函數(shù)代替。
想了解更多請閱讀Pandas Reference (sort_values)
9 – 繪圖(箱型圖&直方圖)
許多人可能沒意識到Pandas可以直接繪制箱型圖和直方圖,不必單獨(dú)調(diào)用matplotlib。只需要一行代碼。舉例來說,如果我們想根據(jù)貸款狀態(tài)Loan_Status來比較申請者收入ApplicantIncome:
data.boxplot(column="ApplicantIncome",by="Loan_Status")data.hist(column="ApplicantIncome",by="Loan_Status",bins=30)
可以看出獲得/未獲得貸款的人沒有明顯的收入差異,即收入不是決定性因素。
想了解更多請閱讀Pandas Reference (hist) | Pandas Reference (boxplot)
10 – 用Cut函數(shù)分箱
有時(shí)把數(shù)值聚集在一起更有意義。例如,如果我們要為交通狀況(路上的汽車數(shù)量)根據(jù)時(shí)間(分鐘數(shù)據(jù))建模。具體的分鐘可能不重要,而時(shí)段如“上午”“下午”“傍晚”“夜間”“深夜”更有利于預(yù)測。如此建模更直觀,也能避免過度擬合。
這里我們定義一個(gè)簡單的、可復(fù)用的函數(shù),輕松為任意變量分箱。
想了解更多請閱讀 Pandas Reference (cut)
11 – 為分類變量編碼
有時(shí),我們會面對要改動分類變量的情況。原因可能是:
有些算法(如羅吉斯回歸)要求所有輸入項(xiàng)目是數(shù)字形式。所以分類變量常被編碼為0, 1….(n-1)
有時(shí)同一個(gè)分類變量可能會有兩種表現(xiàn)方式。如,溫度可能被標(biāo)記為“High”, “Medium”, “Low”,“H”, “l(fā)ow”。這里 “High” 和 “H”都代表同一類別。同理, “Low” 和“l(fā)ow”也是同一類別。但Python會把它們當(dāng)作不同的類別。
一些類別的頻數(shù)非常低,把它們歸為一類是個(gè)好主意。
這里我們定義了一個(gè)函數(shù),以字典的方式輸入數(shù)值,用‘replace’函數(shù)進(jìn)行編碼。
#使用Pandas replace函數(shù)定義新函數(shù):def coding(col, codeDict):colCoded = pd.Series(col, copy=True)for key, value in codeDict.items():colCoded.replace(key, value, inplace=True)return colCoded?#把貸款狀態(tài)LoanStatus編碼為Y=1, N=0:print 'Before Coding:'print pd.value_counts(data["Loan_Status"])data["Loan_Status_Coded"] = coding(data["Loan_Status"], {'N':0,'Y':1})print '\nAfter Coding:'print pd.value_counts(data["Loan_Status_Coded"])
編碼前后計(jì)數(shù)不變,證明編碼成功。
想了解更多請閱讀 Pandas Reference (replace)
12 – 在一個(gè)數(shù)據(jù)框的各行循環(huán)迭代
這不是一個(gè)常見的操作。但你總不想卡在這里吧?有時(shí)你會需要用一個(gè)for循環(huán)來處理每行。例如,一個(gè)常見的問題是變量處置不當(dāng)。通常見于以下情況:
帶數(shù)字的分類變量被當(dāng)做數(shù)值。
(由于出錯(cuò))帶文字的數(shù)值變量被當(dāng)做分類變量。
所以通常來說手動定義變量類型是個(gè)好主意。如我們檢查各列的數(shù)據(jù)類型:
#檢查當(dāng)前數(shù)據(jù)類型:data.dtypes
這里可以看到分類變量Credit_History被當(dāng)作浮點(diǎn)數(shù)。對付這個(gè)問題的一個(gè)好辦法是創(chuàng)建一個(gè)包含變量名和類型的csv文件。通過這種方法,我們可以定義一個(gè)函數(shù)來讀取文件,并為每列指派數(shù)據(jù)類型。舉例來說,我們創(chuàng)建了csv文件datatypes.csv。
載入這個(gè)文件之后,我們能對每行迭代,把用‘type’列把數(shù)據(jù)類型指派到‘feature’ 列對應(yīng)的項(xiàng)目。
現(xiàn)在信用記錄這一列的類型已經(jīng)成了‘object’ ,這在Pandas中代表分類變量。
想了解更多請閱讀Pandas Reference (iterrows)
總結(jié)
以上是生活随笔為你收集整理的用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用 Python 做数据处理必看:12
- 下一篇: python如何去掉字符串‘\xa0’