網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
詳解Pandas的三大利器(map,apply,applymap)_python
作者:Python學(xué)習(xí)與數(shù)據(jù)挖掘 ? 更新時(shí)間: 2022-04-28 編程語(yǔ)言實(shí)際工作中,我們?cè)诶?pandas進(jìn)行數(shù)據(jù)處理的時(shí)候,經(jīng)常會(huì)對(duì)數(shù)據(jù)框中的單行、多行(列也適用)甚至是整個(gè)數(shù)據(jù)進(jìn)行某種相同方式的處理,比如將數(shù)據(jù)中的 sex字段將 男替換成1,女替換成0。
在這個(gè)時(shí)候,很容易想到的是 for循環(huán)。用 for循環(huán)是一種很簡(jiǎn)單、直接的方式,但是運(yùn)行效率很低。本文中介紹了 pandas中的三大利器: map、apply、applymap 來(lái)解決上述同樣的需求。
- map
- apply
- applymap
模擬數(shù)據(jù)
通過(guò)一個(gè)模擬的數(shù)據(jù)來(lái)說(shuō)明3個(gè)函數(shù)的使用,在這個(gè)例子中學(xué)會(huì)了如何生成各種模擬數(shù)據(jù)。數(shù)據(jù)如下:
import pandas as pd import numpy as np boolean = [True, False] gender = ["男","女"] color = ["white","black","red"] # 好好學(xué)習(xí)如何生成模擬數(shù)據(jù):非常棒的例子 # 學(xué)會(huì)使用random模塊中的randint方法 df = pd.DataFrame({"height":np.random.randint(160,190,100), "weight":np.random.randint(60,90,100), "smoker":[boolean[x] for x in np.random.randint(0,2,100)], "gender":[gender[x] for x in np.random.randint(0,2,100)], "age":np.random.randint(20,60,100), "color":[color[x] for x in np.random.randint(0,len(color),100)] }) df.head()
1、map
demo
map() 會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射。
第一個(gè)參數(shù) function 以參數(shù)序列中的每一個(gè)元素調(diào)用 function 函數(shù),返回包含每次 function 函數(shù)返回值的新列表。
map(function, iterable)
實(shí)際數(shù)據(jù)
將gender中男變成1,女變成0
# 方式1:通過(guò)字典映射實(shí)現(xiàn) dic = {"男":1, "女":0} # 通過(guò)字典映射 df1 = df.copy() # 副本,不破壞原來(lái)的數(shù)據(jù)df df1["gender"] = df1["gender"].map(dic) df1 # 方式2:通過(guò)函數(shù)實(shí)現(xiàn) def map_gender(x): gender = 1 if x == "男" else 0 return gender df2 = df.copy() # 將df["gender"]這個(gè)S型數(shù)據(jù)中的每個(gè)數(shù)值傳進(jìn)去 df2["gender"] = df2["gender"].map(map_gender) df2
2、apply
apply方法的作用原理和 map方法類似,區(qū)別在于 apply能夠傳入功能更為復(fù)雜的函數(shù),可以說(shuō) apply是 map的高級(jí)版
pandas 的 apply() 函數(shù)可以作用于 Series 或者整個(gè) DataFrame,功能也是自動(dòng)遍歷整個(gè) Series 或者 DataFrame, 對(duì)每一個(gè)元素運(yùn)行指定的函數(shù)。
在 DataFrame對(duì)象的大多數(shù)方法中,都會(huì)有 axis這個(gè)參數(shù),它控制了你指定的操作是沿著0軸還是1軸進(jìn)行。 axis=0代表操作對(duì) 列columns進(jìn)行, axis=1代表操作對(duì) 行row進(jìn)行
demo
上面的數(shù)據(jù)中將age字段的值都減去3,即加上-3
def apply_age(x,bias): ? ? return x + bias df4 = df.copy() # df4["age"]當(dāng)做第一個(gè)值傳給apply_age函數(shù),args是第二個(gè)參數(shù) df4["age"] = df4["age"].apply(apply_age,args=(-3,))
計(jì)算BMI指數(shù)
# 實(shí)現(xiàn)計(jì)算BMI指數(shù):體重/身高的平方(kg/m^2) def BMI(x): weight = x["weight"] height = x["height"] / 100 BMI = weight / (height **2) return BMI df5 = df.copy() df5["BMI"] = df5.apply(BMI,axis=1) # df5現(xiàn)在就相當(dāng)于BMI函數(shù)中的參數(shù)x;axis=1表示在列上操作 df5
DataFrame型數(shù)據(jù)的 apply操作總結(jié):
- 當(dāng) axis=0時(shí),對(duì) 每列columns執(zhí)行指定函數(shù);當(dāng) axis=1時(shí),對(duì) 每行row執(zhí)行指定函數(shù)。
- 無(wú)論 axis=0還是 axis=1,其傳入指定函數(shù)的默認(rèn)形式均為 Series,可以通過(guò)設(shè)置 raw=True傳入 numpy數(shù)組。
- 對(duì)每個(gè)Series執(zhí)行結(jié)果后,會(huì)將結(jié)果整合在一起返回(若想有返回值,定義函數(shù)時(shí)需要 return相應(yīng)的值)
apply實(shí)現(xiàn)需求
通過(guò)apply方法實(shí)現(xiàn)上面的性別轉(zhuǎn)換需求。apply方法中傳進(jìn)來(lái)的第一個(gè)參數(shù)一定是函數(shù)
3、applymap
DF數(shù)據(jù)加1
applymap函數(shù)用于對(duì)DF型數(shù)據(jù)中的每個(gè)元素執(zhí)行相同的函數(shù)操作,比如下面的加1:
保留2位有效數(shù)字
原文鏈接:https://blog.csdn.net/weixin_38037405/article/details/123128385
相關(guān)推薦
- 2022-07-06 python中csv文件創(chuàng)建、讀取及修改等操作實(shí)例_python
- 2023-05-10 淺談numpy廣播機(jī)制_python
- 2022-04-23 實(shí)現(xiàn)一個(gè)內(nèi)容超出顯示省略號(hào),并鼠標(biāo)浮入顯示tooltip,不超出的不顯示tooltip組件
- 2022-07-12 Linux中xargs命令的用法
- 2022-02-22 Android對(duì)話框AlertDialog詳解_Android
- 2022-07-19 關(guān)于 Angular 注解 @Injectable() 使用的一些誤區(qū)
- 2022-01-28 laravel try異常abort只報(bào)出最外層
- 2022-12-21 C和C++中argc和argv的含義及用法詳解_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支