在 pandas 中提供了利用映射關係來實現某些操做的函數,具體以下:html
在數據處理時,常常會遇到須要將數據結構中原來的元素根據實際需求替換成新元素的狀況。要想用新元素替換原來元素,就須要定義一組映射關係。在映射關係中,將舊元素做爲鍵,新元素做爲值。
例如,建立字典 fruits 用於指明水果標識和水果名稱的映射關係。python
fruits={101:'orange',102:'apple',103:'banana'}
如要將用於存儲水果標識、水果數量和單價的 DataFrame 對象中的水果標識替換成水果名稱,就須要運用 replace() 函數,經過 fruits 映射關係來實現元素的替換。
replace() 函數的基本語法格式以下:正則表達式
obj.replace(to_replace=None,value=None,inplace=False,limit=None,regex= False,method='pad')
函數中的參數說明以下:數組
【例 1】利用 replace() 函數和映射關係實現將水果數據框中水果標識替換成水果名稱。
示例代碼 test1.py 以下:數據結構
import numpy as np import pandas as pd #建立水果標識與水果名稱的映射關係 fruits = {101:'orange',102:'apple',103:'banana'} #建立水果數據框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() 函數應用的示例代碼 example1.py 以下:app
import numpy as np import pandas as pd from pandas import Series,DataFrame s = Series([-1000,-999,2,3,4,5,-2000]) #單數值替換 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 #將多個數值替換 print(s.replace([-1000,-999],0)) 0 0 1 0 2 2 3 3 4 4 5 5 6 -2000 #不一樣的值進行不一樣的替換 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 #用字典方式進行不一樣的替換 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】中介紹了利用函數和映射來實現將水果標識替換成水果名稱的方法。可是有時須要保留水果標識,將水果名稱添加到數據集中。函數
那麼,這時可利用 map() 函數,經過構建 fruits 映射關係來實現元素的添加。
map() 函數是做用於 Series 或 DataFrame 對象的一列,它接收一個函數或表示映射關係的字典做爲參數,它的基本語法格式以下:ui
Series.map(arg,na_action=None)
函數中的參數說明以下:spa
【例 2】利用 map() 函數和映射關係實現將水果名稱添加到水果數據框中。
示例代碼 test2.py 以下:code
import pandas as pd #建立水果標識與水果名稱的映射關係 fruits = {101:'orange',102:'apple',103:'banana'} #建立水果數據框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
在數據處理中,有時須要使用映射關係轉換軸標籤。pandas 的 rename() 函數是以表示映射關係的字典對象做爲參數,替換軸的索引標籤。
rename() 函數的基本語法格式以下:
DataFrame.rename(mapper=None,index=None,columns=None,axis=None,copy=True, inplace=False,level=None) 或 Series.rename(index=None,**kwargs)
函數中的參數說明以下:
rename() 函數返回值是 DataFrame 或 Series。
【例 3】利用 rename() 函數和映射關係重命名水果數據框的行索引和列索引。
示例代碼 test3.py 以下:
import pandas as pd #建立行索引的映射關係 reindex = {0:'row1',1:'row2',2:'row3'} #建立水果數據框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 #用映射重命名水果數據框的行索引,產生新DataFrame,但原數據不改變 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 #用映射重命名水果數據框的行索引,產生新DataFrame,但原數據改變 newDf = data.rename(reindex,inplace=True) print(newDf) #newDf是None,data原數據改變 #建立列索引的映射關係 recolumns = {'fru_No':'col1','fru_Num':'col2','price':'col3'} #用映射重命名水果數據框中的行索引和列索引 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 #用映射重命名水果數據框的單個行索引和單個列索引 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() 函數返回一個通過改動的新 DataFrame 對象,但原 DataFrame 對象仍保持不變,若是要改變調用函數的對象自己,可以使用 inplace 選項,並將其值設置爲 True。
參考:https://www.92python.com/view/145.html