Python Pandas學(xué)習(xí)之?dāng)?shù)據(jù)離散化與合并詳解
1 數(shù)據(jù)離散化
1.1 為什么要離散化
連續(xù)屬性離散化的目的是為了簡(jiǎn)化數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)離散化技術(shù)可以用來(lái)減少給定連續(xù)屬性值的個(gè)數(shù)。離散化方法經(jīng)常作為數(shù)據(jù)挖掘的工具。
1.2 什么是數(shù)據(jù)的離散化
連續(xù)屬性的離散化就是在連續(xù)屬性的值域上,將值域劃分為若干個(gè)離散的區(qū)間,最后用不同的符號(hào)或整數(shù) 值代表落在每個(gè)子區(qū)間中的屬性值。
離散化有很多種方法,下面距離一種最簡(jiǎn)單的方式去操作。
- 原始人的身高數(shù)據(jù):165,174,160,180,159,163,192,184
- 假設(shè)按照身高分幾個(gè)區(qū)間段:150-165,165-180,180~195
這樣我們將數(shù)據(jù)分到了三個(gè)區(qū)間段,我可以對(duì)應(yīng)的標(biāo)記為矮、中、高三個(gè)類別,最終要處理成一個(gè)"啞變量"矩陣。
1.3 舉例股票的漲跌幅離散化
下面對(duì)股票每日的漲跌幅度進(jìn)行離散化
1.3.1 讀取股票的數(shù)據(jù)
先讀取股票的數(shù)據(jù),篩選出漲跌幅度的數(shù)據(jù)
data = pd.read_csv("./data/stock_day.csv") p_change= data['p_change']
1.3.2 將股票漲跌幅數(shù)據(jù)進(jìn)行分組
使用的api:
- pd.qcut(data, q):對(duì)數(shù)據(jù)進(jìn)行分組將數(shù)據(jù)分組,一般會(huì)與value_counts搭配使用,統(tǒng)計(jì)每組的個(gè)數(shù)
- series.value_counts():統(tǒng)計(jì)分組次數(shù)
自定義區(qū)間分組:
pd.cut(data, bins)
# 自己指定分組區(qū)間 bins = [-20, -7, -5, -3, 0, 3, 5, 7, 20] p_counts = pd.cut(p_change, bins)
1.3.3 股票漲跌幅分組數(shù)據(jù)變成one-hot編碼
什么是one-hot編碼
把每個(gè)類別生成一個(gè)布爾列,這些列中只有一列可以為這個(gè)樣本取值為1.其又被稱為熱編碼。
pandas.get_dummies(data, prefix=None)
- data:array-like, Series, or DataFrame
- prefix:分組名字
bins = [-20, -7, -5, -3, 0, 3, 5, 7, 20] p_counts = pd.cut(p_change, bins) # 得出one-hot編碼矩陣 dummies = pd.get_dummies(p_counts, prefix = "漲跌幅度")
2 數(shù)據(jù)合并
如果你的數(shù)據(jù)由多張表組成,那么有時(shí)候需要將不同的內(nèi)容合并在一起分析。
2.1 pd.concat實(shí)現(xiàn)數(shù)據(jù)合并
pd.concat([data1, data2], axis=1)
按照行或列進(jìn)行合并,axis=0為列索引,axis=1為行索引
比如我們將剛才處理好的one-hot編碼與原數(shù)據(jù)合并
# 按照行索引進(jìn)行 pd.concat([data, dummies], axis=1)
2.2 pd.merge
pd.merge(left, right, how=‘inner’, on=None)
- 可以指定按照兩組數(shù)據(jù)的共同鍵值對(duì)合并或者左右各自
- left: DataFrame
- right: 另一個(gè)DataFrame
- on: 指定的共同鍵
- how:按照什么方式連接,連接方式和數(shù)據(jù)庫(kù)類似分為內(nèi)連接,外連接,左連接,右連接
2.2.1 pd.merge合并
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) # 默認(rèn)內(nèi)連接 result = pd.merge(left, right, on=['key1', 'key2'])
左連接
result = pd.merge(left, right, how='left', on=['key1', 'key2'])
右連接
result = pd.merge(left, right, how='right', on=['key1', 'key2'])
外鏈接
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])
到此這篇關(guān)于Python Pandas學(xué)習(xí)之?dāng)?shù)據(jù)離散化與合并詳解的文章就介紹到這了,更多相關(guān)Python Pandas內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python讀寫csv并將csv數(shù)據(jù)寫入數(shù)據(jù)庫(kù)
CSV,也即Comma-Separated?Values,是一種用于存儲(chǔ)表格數(shù)據(jù)的純文本文件格式,本文主要介紹了如何使用python讀寫csv并將csv數(shù)據(jù)寫入數(shù)據(jù)庫(kù),感興趣的可以了解下2024-11-11使用python和opencv的mask實(shí)現(xiàn)摳圖疊加
這篇文章主要介紹了使用python和opencv的mask實(shí)現(xiàn)摳圖疊加操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04Django 權(quán)限認(rèn)證(根據(jù)不同的用戶,設(shè)置不同的顯示和訪問(wèn)權(quán)限)
這篇文章主要介紹了Django 權(quán)限認(rèn)證(根據(jù)不同的用戶,設(shè)置不同的顯示和訪問(wèn)權(quán)限),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python enumerate函數(shù)功能與用法示例
這篇文章主要介紹了Python enumerate函數(shù)功能與用法,結(jié)合實(shí)例形式分析了enumerate函數(shù)針對(duì)列表、字符串遍歷操作相關(guān)使用技巧,需要的朋友可以參考下2019-03-03postman傳遞當(dāng)前時(shí)間戳實(shí)例詳解
在本篇文章里小編給大家整理的是一篇關(guān)于postman傳遞當(dāng)前時(shí)間戳知識(shí)點(diǎn)相關(guān)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2019-09-09Requests什么的通通爬不了的Python超強(qiáng)反爬蟲方案!
今天帶大家學(xué)習(xí)Requests什么的通通爬不了的Python超強(qiáng)反爬蟲方案,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05如何用Python中Tushare包輕松完成股票篩選(詳細(xì)流程操作)
這篇文章主要介紹了如何用Python中Tushare包輕松完成股票篩選(詳細(xì)流程操作),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03