您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么利用pandas函數處理數據,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
一、pandas.Series.map()是什么?
把Series中的值進行逐一映射,帶入進函數、字典或Series中得出的另一個值。
Series.map(arg, na_action=None)
參數:
arg:函數、字典類數據、Series;映射對應關系
na_action{None, ‘ignore'}:默認為None;處理NaN變量,如果為None則不處理NaN對象,如果為‘ignore'則將NaN對象當做普通對象帶入規則。
返回Series
二、pandas.Series.map()用法和優點
本節主要講述map()函數的主要用法和相比于方法的優點
1、map()用法
創建案例DataFrame
import pandas as pd import numpy as np import time data = pd.DataFrame({'name':['Verne Raymond','Chapman Becher','Patrick George','Saxon MacArthur', 'Joshua Marjory','Luther Pigou','Fanny Agnes','Karen Bush','Elaine Whitman'], 'gender':[0,1,0,0,1,1,1,0,1],'first_name':np.nan,'last_name':np.nan}) print(data)
name gender first_name last_name
0 Verne Raymond 0 NaN NaN
1 Chapman Becher 1 NaN NaN
2 Patrick George 0 NaN NaN
3 Saxon MacArthur 0 NaN NaN
4 Joshua Marjory 1 NaN NaN
5 Luther Pigou 1 NaN NaN
6 Fanny Agnes 1 NaN NaN
7 Karen Bush 0 NaN NaN
8 Elaine Whitman 1 NaN NaN
現在需要將name列的姓和名拆分開來分別放入first_name 和last_name里面,使用map()函數實現,并計算所用時間
def first_name_map(x): return x.split(' ')[0] def last_name_map(x): return x.split(' ')[1] data['first_name'] = data['name'].map(first_name_map) data['last_name'] = data['name'].map(last_name_map) print('use time:'+str(end-start)) print(data)
use time:0.0009970664978027344
name gender first_name last_name
0 Verne Raymond 0 Verne Raymond
1 Chapman Becher 1 Chapman Becher
2 Patrick George 0 Patrick George
3 Saxon MacArthur 0 Saxon MacArthur
4 Joshua Marjory 1 Joshua Marjory
5 Luther Pigou 1 Luther Pigou
6 Fanny Agnes 1 Fanny Agnes
7 Karen Bush 0 Karen Bush
8 Elaine Whitman 1 Elaine Whitman
如果要將性別代號的0、1替換為中文Male和Female,可以使用字典映射功能,如下
data['gender'] = data['gender'].map({0:'Female',1:'Male'}) print(data)
name gender first_name last_name
0 Verne Raymond Female Verne Raymond
1 Chapman Becher Male Chapman Becher
2 Patrick George Female Patrick George
3 Saxon MacArthur Female Saxon MacArthur
4 Joshua Marjory Male Joshua Marjory
5 Luther Pigou Male Luther Pigou
6 Fanny Agnes Male Fanny Agnes
7 Karen Bush Female Karen Bush
8 Elaine Whitman Male Elaine Whitman
2、map()相比其他方式的優點
較普通的方法主要是方便和速度快,下面例子進行對比,上面已經計算過使用map()方法處理的速度為:0.0009970664978027344
傳統遍歷
start = time.time() for index,rows in data.iterrows(): data['first_name'][index] = rows['name'].split(' ')[0] data['last_name'][index] = rows['name'].split(' ')[1] end = time.time() print('use time:'+str(end-start))
use time:0.5146446228027344
可以看到使用map()方法比使用直接遍歷的方式快了500多倍
list暫存的方法
start = time.time() first_name = [] last_name = [] for index,rows in data.iterrows(): first_name.append(rows['name'].split(' ')[0]) last_name.append(rows['name'].split(' ')[1]) data['first_name'] = first_name data['last_name'] = last_name end = time.time() print('use time:'+str(end-start))
use time:0.001994609832763672
可以看出來使用list暫存的方法比遍歷方法快了250多倍,但是比map方法還是慢了一半
二、apply()函數
apply()的使用方法與map()的使用方法類似,只是apply()除了傳入Series參數外還可以多傳入額外的參數。
Series.apply(func,convert_dtype = True,args = (), **kwds)
參數:
func:函數名稱
convert_dtype:bool類值, 默認為True;嘗試自己尋找最適合的數據類型。如果為False則dtype=object。
args:元組;在Series之后傳遞位置參數信息
**kwds:給函數傳遞其他參數(以字典的形式)
返回Series或DataFrame
下面是案例(參考官方文檔案例)
s = pd.Series([20, 21, 12],index=['London', 'New York', 'Helsinki']) print(s)
London 20
New York 21
Helsinki 12
dtype: int64
處理數據
def subtract_custom_value(x, custom_value): return x - custom_value s.apply(subtract_custom_value, args=(5,))
London 15
New York 16
Helsinki 7
dtype: int64
使用**kwds參數
def subtract_custom_value(x, **kwds): for key in kwds: x -= kwds[key] return x s.apply(subtract_custom_value, num = 5)
London 15
New York 16
Helsinki 7
dtype: int64
三、applymap()函數用法
applymap()函數處理的對象是DataFrame,并非Series,它沒有前面兩個函數用得多,但在某些情況也很有用。
DataFrame.applymap(func)
參數:
func:函數;要調用的Python函數,輸入輸出都為單個值
返回DataFrame
下面是簡單的案例:
import pandas as pd import numpy as np data = pd.DataFrame( { "A":np.random.randn(3), "B":np.random.randn(3), "C":np.random.randn(3), } ) print(data )
A B C
0 2.128483 -1.701311 -1.362955
1 -1.149937 1.108856 -0.259637
2 -0.076621 -0.379672 -2.636464
計算所有值的平方:
data.applymap(lambda x: x**2)
A B C
0 4.530439 2.894459 1.857645
1 1.322356 1.229561 0.067411
2 0.005871 0.144151 6.950940
關于怎么利用pandas函數處理數據就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。