首頁 > 科技

Pandas中的寶藏函數-map

2021-07-29 03:15:25

來源:AI入門學習

作者:小伍哥

pandas中的map類似於Python內建的map()方法,pandas中的map()方法將函數、字典索引或是一些需要接受單個輸入值的特別的物件與對應的單個列的每一個元素建立聯絡並序列得到結果。

這裡我們想要得到gender列的F、M轉換為女性、男性的新列,可以有以下幾種實現方式先構造一個數據集

map()函數可以用於Series物件或DataFrame物件的一列,接收函數作為或字典物件作為參數,返回經過函數或字典對映處理後的值。

用法:Series.map(arg, na_action=None)

參數:

arg : function, dict, or Series

Mapping correspondence.

na_action : {None, ‘ignore’}, default None

If ‘ignore’, propagate NaN values, without passing them to the mapping

correspondence.

返回:Pandas Series with same as index as caller

官方:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html

首先構建一個數據集,下面進行案例應用

data = pd.DataFrame({"name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],"gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],"age":[25, 34, 49, 42, 28, 23, 45, 21, 34, 29]}                     ) data name gender  age0   Jack      F   251  Alice      M   342   Lily      F   493  Mshis      F   424   Gdli      M   285  Agosh      F   236   Filu      M   457   Mack      M   218   Lucy      F   349   Pony      F   29

1 字典對映

這裡我們編寫F、M與女性、男性之間一一對映的字典,再利用map()方法來得到對映列:

#定義F->女性,M->男性的對映字典gender2xb = {'F': '女性', 'M': '男性'}#利用map()方法得到對應gender列的對映列data.gender.map(gender2xb)0    女性1    男性2    女性3    女性4    男性5    女性6    男性7    男性8    女性9    女性

2 lambda函數

這裡我們向map()中傳入lambda函數來實現所需功能:

#因為已經知道資料gender列性別中只有F和M所以編寫如下lambda函數

data.gender.map(lambda x:'女性' if x == 'F' else '男性')0    女性1    男性2    女性3    女性4    男性5    女性6    男性7    男性8    女性9    女性#年齡的平方data.age.map(lambda x: x**2)0     6251    11562    24013    17644     7845     5296    20257     4418    11569     84

3 常規函數

map函數,也可以傳入通過def定義的常規函數,看看下面的案例

#性別轉換def gender_to_xb(x):    return '女性' if x == 'F' else '男性'    data.gender.map(gender_to_xb)0    女性1    男性2    女性3    女性4    男性5    女性6    男性7    男性8    女性9    女性

4 特殊物件

map()可以傳入的內容有時候可以很特殊,如下面的例子:一些接收單個輸入值且有輸出的物件也可以用map()方法來處理:

data.gender.map("This kid's gender is {}".format)0    This kid's gender is F1    This kid's gender is M2    This kid's gender is F3    This kid's gender is F4    This kid's gender is M5    This kid's gender is F6    This kid's gender is M7    This kid's gender is M8    This kid's gender is F9    This kid's gender is F

map()中的參數na_action,類似R中的na.action,取值為None或ingore,用於控制遇到缺失值的處理方式,設定為ingore時序列運算過程中將忽略Nan值原樣返回。

s = pd.Series(['cat', 'dog', np.nan, 'rabbit']) s0      cat1      dog2      NaN3   rabbit

na_action為預設值的情況

s.map('I am a {}'.format)0       I am a cat1       I am a dog2       I am a nan3    I am a rabbit

na_action為ignore的情況

s.map('I am a {}'.format, na_action='ignore')0 I am a cat1 I am a dog2 NaN3 I am a rabbit


IT145.com E-mail:sddin#qq.com