在 pandas 中提供了利用映射關(guān)系來(lái)實(shí)現(xiàn)某些操作的函數(shù),具體如下:
在數(shù)據(jù)處理時(shí),經(jīng)常會(huì)遇到需要將數(shù)據(jù)結(jié)構(gòu)中原來(lái)的元素根據(jù)實(shí)際需求替換成新元素的情況。要想用新元素替換原來(lái)元素,就需要定義一組映射關(guān)系。在映射關(guān)系中,將舊元素作為鍵,新元素作為值。
例如,創(chuàng)建字典 fruits 用于指明水果標(biāo)識(shí)和水果名稱(chēng)的映射關(guān)系。
fruits={101:'orange',102:'apple',103:'banana'}
如要將用于存儲(chǔ)水果標(biāo)識(shí)、水果數(shù)量和單價(jià)的 DataFrame 對(duì)象中的水果標(biāo)識(shí)替換成水果名稱(chēng),就需要運(yùn)用 replace() 函數(shù),通過(guò) fruits 映射關(guān)系來(lái)實(shí)現(xiàn)元素的替換。
replace() 函數(shù)的基本語(yǔ)法格式如下:
obj.replace(to_replace=None,value=None,inplace=False,limit=None,regex= False,method='pad')
函數(shù)中的參數(shù)說(shuō)明如下:
【例 1】利用 replace() 函數(shù)和映射關(guān)系實(shí)現(xiàn)將水果數(shù)據(jù)框中水果標(biāo)識(shí)替換成水果名稱(chēng)。
示例代碼 test1.py 如下:
import numpy as np import pandas as pd #創(chuàng)建水果標(biāo)識(shí)與水果名稱(chēng)的映射關(guān)系 fruits = {101:'orange',102:'apple',103:'banana'} #創(chuàng)建水果數(shù)據(jù)框DataFrame data = pd.DataFrame({'fru_No':[101,102,103] ,'fru_Num':[1000,2000,3000] ,'price':[3.56,4.2,2.5]}) #用映射替換fru_No列的元素 newDf = data.replace(fruits) print(newDf) #輸出如下 fru_No fru_Num price 0 orange 1000 3.56 1 apple 2000 4.20 2 banana 3000 2.50
replace() 函數(shù)應(yīng)用的示例代碼 example1.py 如下:
import numpy as np import pandas as pd from pandas import Series,DataFrame s = Series([-1000,-999,2,3,4,5,-2000]) #單數(shù)值替換 print(s.replace(-2000,np.nan)) 0 -1000.0 1 -999.0 2 2.0 3 3.0 4 4.0 5 5.0 6 NaN #將多個(gè)數(shù)值替換 print(s.replace([-1000,-999],0)) 0 0 1 0 2 2 3 3 4 4 5 5 6 -2000 #不同的值進(jìn)行不同的替換 print(s.replace([-1000,-999],[np.nan,0])) 0 NaN 1 0.0 2 2.0 3 3.0 4 4.0 5 5.0 6 -2000.0 #用字典方式進(jìn)行不同的替換 print(s.replace({-1000:np.nan,-999:0,-2000:np.nan})) 0 NaN 1 0.0 2 2.0 3 3.0 4 4.0 5 5.0 6 NaN
在【例 1】中介紹了利用函數(shù)和映射來(lái)實(shí)現(xiàn)將水果標(biāo)識(shí)替換成水果名稱(chēng)的方法。但是有時(shí)需要保留水果標(biāo)識(shí),將水果名稱(chēng)添加到數(shù)據(jù)集中。
那么,這時(shí)可利用 map() 函數(shù),通過(guò)構(gòu)建 fruits 映射關(guān)系來(lái)實(shí)現(xiàn)元素的添加。
map() 函數(shù)是作用于 Series 或 DataFrame 對(duì)象的一列,它接收一個(gè)函數(shù)或表示映射關(guān)系的字典作為參數(shù),它的基本語(yǔ)法格式如下:
Series.map(arg,na_action=None)
函數(shù)中的參數(shù)說(shuō)明如下:
【例 2】利用 map() 函數(shù)和映射關(guān)系實(shí)現(xiàn)將水果名稱(chēng)添加到水果數(shù)據(jù)框中。
示例代碼 test2.py 如下:
import pandas as pd #創(chuàng)建水果標(biāo)識(shí)與水果名稱(chēng)的映射關(guān)系 fruits = {101:'orange',102:'apple',103:'banana'} #創(chuàng)建水果數(shù)據(jù)框DataFrame data = pd.DataFrame({'fru_No':[101,102,103],'fru_Num':[1000,2000,3000],'price': [3.56,4.2,2.5]}) #用映射為data添加fru_name列元素 data['fru_name'] = data['fru_No'].map(fruits) print(data) fru_No fru_Num price fru_name 0 101 1000 3.56 orange 1 102 2000 4.20 apple 2 103 3000 2.50 banana
在數(shù)據(jù)處理中,有時(shí)需要使用映射關(guān)系轉(zhuǎn)換軸標(biāo)簽。pandas 的 rename() 函數(shù)是以表示映射關(guān)系的字典對(duì)象作為參數(shù),替換軸的索引標(biāo)簽。
rename() 函數(shù)的基本語(yǔ)法格式如下:
DataFrame.rename(mapper=None,index=None,columns=None,axis=None,copy=True, inplace=False,level=None) 或 Series.rename(index=None,**kwargs)
函數(shù)中的參數(shù)說(shuō)明如下:
rename() 函數(shù)返回值是 DataFrame 或 Series。
【例 3】利用 rename() 函數(shù)和映射關(guān)系重命名水果數(shù)據(jù)框的行索引和列索引。
示例代碼 test3.py 如下:
import pandas as pd #創(chuàng)建行索引的映射關(guān)系 reindex = {0:'row1',1:'row2',2:'row3'} #創(chuàng)建水果數(shù)據(jù)框DataFrame data = pd.DataFrame({'fru_No':[101,102,103],'fru_Num':[1000,2000,3000],'price': [3.56,4.2,2.5]}) fru_No fru_Num price 0 101 1000 3.56 1 102 2000 4.20 2 103 3000 2.50 #用映射重命名水果數(shù)據(jù)框的行索引,產(chǎn)生新DataFrame,但原數(shù)據(jù)不改變 newDf = data.rename(reindex) print(newDf) fru_No fru_Num price row1 101 1000 3.56 row2 102 2000 4.20 row3 103 3000 2.50 #用映射重命名水果數(shù)據(jù)框的行索引,產(chǎn)生新DataFrame,但原數(shù)據(jù)改變 newDf = data.rename(reindex,inplace=True) print(newDf) #newDf是None,data原數(shù)據(jù)改變 #創(chuàng)建列索引的映射關(guān)系 recolumns = {'fru_No':'col1','fru_Num':'col2','price':'col3'} #用映射重命名水果數(shù)據(jù)框中的行索引和列索引 newDf = data.rename(index=reindex,columns=recolumns) print(newDf) col1 col2 col3 row1 101 1000 3.56 row2 102 2000 4.20 row3 103 3000 2.50 #用映射重命名水果數(shù)據(jù)框的單個(gè)行索引和單個(gè)列索引 newDf = data.rename(index={'row2':'s1'},columns={'fru_No':'111'}) print(newDf) 111 fru_Num price row1 101 1000 3.56 s1 102 2000 4.20 row3 103 3000 2.50
注意:rename() 函數(shù)返回一個(gè)經(jīng)過(guò)改動(dòng)的新 DataFrame 對(duì)象,但原 DataFrame 對(duì)象仍保持不變,如果要改變調(diào)用函數(shù)的對(duì)象本身,可使用 inplace 選項(xiàng),并將其值設(shè)置為 True。
以上就是詳解pandas映射與數(shù)據(jù)轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于pandas映射與數(shù)據(jù)轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
標(biāo)簽:周口 綏化 百色 秦皇島 周口 綿陽(yáng) 合肥 淮安
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解pandas映射與數(shù)據(jù)轉(zhuǎn)換》,本文關(guān)鍵詞 詳解,pandas,映射,與,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。