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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

點擊打開鏈接

7 – 數據框合并

當我們有收集自不同來源的數據時,合并數據框就變得至關重要。假設對于不同的房產類型,我們有不同的房屋均價數據。讓我們定義這樣一個數據框:

prop_rates = pd.DataFrame([1000, 5000, 12000], index=['Rural','Semiurban','Urban'],columns=['rates'])prop_rates


現在可以把它與原始數據框合并:

data_merged = data.merge(right=prop_rates, how='inner',left_on='Property_Area',right_index=True, sort=False)data_merged.pivot_table(values='Credit_History',index=['Property_Area','rates'], aggfunc=len)


這張透視表驗證了合并成功。注意這里的 ‘values’無關緊要,因為我們只是單純計數。
想了解更多請閱讀Pandas Reference (merge)

8 – 給數據框排序

Pandas可以輕松基于多列排序。方法如下:

data_sorted = data.sort_values(['ApplicantIncome','CoapplicantIncome'], ascending=False)data_sorted[['ApplicantIncome','CoapplicantIncome']].head(10)


注:Pandas 的“sort”函數現在已經不推薦使用,我們用 “sort_values”函數代替。
想了解更多請閱讀Pandas Reference (sort_values)

9 – 繪圖(箱型圖&直方圖)

許多人可能沒意識到Pandas可以直接繪制箱型圖和直方圖,不必單獨調用matplotlib。只需要一行代碼。舉例來說,如果我們想根據貸款狀態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函數分箱

有時把數值聚集在一起更有意義。例如,如果我們要為交通狀況(路上的汽車數量)根據時間(分鐘數據)建模。具體的分鐘可能不重要,而時段如“上午”“下午”“傍晚”“夜間”“深夜”更有利于預測。如此建模更直觀,也能避免過度擬合。
這里我們定義一個簡單的、可復用的函數,輕松為任意變量分箱。

#分箱:def binning(col, cut_points, labels=None):#Define min and max values:minval = col.min()maxval = col.max()#利用最大值和最小值創建分箱點的列表break_points = [minval] + cut_points + [maxval]#如果沒有標簽,則使用默認標簽0 ... (n-1)if not labels:labels = range(len(cut_points)+1)#使用pandas的cut功能分箱colBin = pd.cut(col,bins=break_points,labels=labels,include_lowest=True)return colBin#為年齡分箱:cut_points = [90,140,190]labels = ["low","medium","high","very high"]data["LoanAmount_Bin"] = binning(data["LoanAmount"], cut_points, labels)print pd.value_counts(data["LoanAmount_Bin"], sort=False)


想了解更多請閱讀 Pandas Reference (cut)

11 – 為分類變量編碼

有時,我們會面對要改動分類變量的情況。原因可能是:

有些算法(如羅吉斯回歸)要求所有輸入項目是數字形式。所以分類變量常被編碼為0, 1….(n-1)
有時同一個分類變量可能會有兩種表現方式。如,溫度可能被標記為“High”, “Medium”, “Low”,“H”, “low”。這里 “High” 和 “H”都代表同一類別。同理, “Low” 和“low”也是同一類別。但Python會把它們當作不同的類別。
一些類別的頻數非常低,把它們歸為一類是個好主意。

這里我們定義了一個函數,以字典的方式輸入數值,用‘replace’函數進行編碼。

#使用Pandas replace函數定義新函數:def coding(col, codeDict):colCoded = pd.Series(col, copy=True)for key, value in codeDict.items():colCoded.replace(key, value, inplace=True)return colCoded?#把貸款狀態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"])


編碼前后計數不變,證明編碼成功。
想了解更多請閱讀 Pandas Reference (replace)

12 – 在一個數據框的各行循環迭代

這不是一個常見的操作。但你總不想卡在這里吧?有時你會需要用一個for循環來處理每行。例如,一個常見的問題是變量處置不當。通常見于以下情況:

帶數字的分類變量被當做數值。
(由于出錯)帶文字的數值變量被當做分類變量。

所以通常來說手動定義變量類型是個好主意。如我們檢查各列的數據類型:

#檢查當前數據類型:data.dtypes


這里可以看到分類變量Credit_History被當作浮點數。對付這個問題的一個好辦法是創建一個包含變量名和類型的csv文件。通過這種方法,我們可以定義一個函數來讀取文件,并為每列指派數據類型。舉例來說,我們創建了csv文件datatypes.csv。

#載入文件:colTypes = pd.read_csv('datatypes.csv')print colTypes


載入這個文件之后,我們能對每行迭代,把用‘type’列把數據類型指派到‘feature’ 列對應的項目。

#迭代每行,指派變量類型。#注,astype用來指定變量類型。for i, row in colTypes.iterrows(): #i: dataframe索引; row: 連續的每行 if row['feature']=="categorical":data[row['feature']]=data[row['feature']].astype(np.object)elif row['feature']=="continuous":data[row['feature']]=data[row['feature']].astype(np.float)print data.dtypes

現在信用記錄這一列的類型已經成了‘object’ ,這在Pandas中代表分類變量。
想了解更多請閱讀Pandas Reference (iterrows)


總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。