網站首頁 編程語言 正文
實際工作中,我們在利用 pandas進行數據處理的時候,經常會對數據框中的單行、多行(列也適用)甚至是整個數據進行某種相同方式的處理,比如將數據中的 sex字段將 男替換成1,女替換成0。
在這個時候,很容易想到的是 for循環。用 for循環是一種很簡單、直接的方式,但是運行效率很低。本文中介紹了 pandas中的三大利器: map、apply、applymap 來解決上述同樣的需求。
- map
- apply
- applymap
模擬數據
通過一個模擬的數據來說明3個函數的使用,在這個例子中學會了如何生成各種模擬數據。數據如下:
import pandas as pd import numpy as np boolean = [True, False] gender = ["男","女"] color = ["white","black","red"] # 好好學習如何生成模擬數據:非常棒的例子 # 學會使用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() 會根據提供的函數對指定序列做映射。
第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
map(function, iterable)
實際數據
將gender中男變成1,女變成0
# 方式1:通過字典映射實現 dic = {"男":1, "女":0} # 通過字典映射 df1 = df.copy() # 副本,不破壞原來的數據df df1["gender"] = df1["gender"].map(dic) df1 # 方式2:通過函數實現 def map_gender(x): gender = 1 if x == "男" else 0 return gender df2 = df.copy() # 將df["gender"]這個S型數據中的每個數值傳進去 df2["gender"] = df2["gender"].map(map_gender) df2
2、apply
apply方法的作用原理和 map方法類似,區別在于 apply能夠傳入功能更為復雜的函數,可以說 apply是 map的高級版
pandas 的 apply() 函數可以作用于 Series 或者整個 DataFrame,功能也是自動遍歷整個 Series 或者 DataFrame, 對每一個元素運行指定的函數。
在 DataFrame對象的大多數方法中,都會有 axis這個參數,它控制了你指定的操作是沿著0軸還是1軸進行。 axis=0代表操作對 列columns進行, axis=1代表操作對 行row進行
demo
上面的數據中將age字段的值都減去3,即加上-3
def apply_age(x,bias): ? ? return x + bias df4 = df.copy() # df4["age"]當做第一個值傳給apply_age函數,args是第二個參數 df4["age"] = df4["age"].apply(apply_age,args=(-3,))
計算BMI指數
# 實現計算BMI指數:體重/身高的平方(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現在就相當于BMI函數中的參數x;axis=1表示在列上操作 df5
DataFrame型數據的 apply操作總結:
- 當 axis=0時,對 每列columns執行指定函數;當 axis=1時,對 每行row執行指定函數。
- 無論 axis=0還是 axis=1,其傳入指定函數的默認形式均為 Series,可以通過設置 raw=True傳入 numpy數組。
- 對每個Series執行結果后,會將結果整合在一起返回(若想有返回值,定義函數時需要 return相應的值)
apply實現需求
通過apply方法實現上面的性別轉換需求。apply方法中傳進來的第一個參數一定是函數
3、applymap
DF數據加1
applymap函數用于對DF型數據中的每個元素執行相同的函數操作,比如下面的加1:
保留2位有效數字
原文鏈接:https://blog.csdn.net/weixin_38037405/article/details/123128385
相關推薦
- 2022-08-26 一篇文章學會GO語言中的變量_Golang
- 2022-03-26 .Net?6中的PeriodTimer介紹_ASP.NET
- 2022-10-02 C++數據結構之紅黑樹的實現_C 語言
- 2022-11-22 Kotlin?List與Set和Map實例講解_Android
- 2022-04-29 C++對象排序的比較你了解嗎_C 語言
- 2022-08-04 基于Python實現煙花效果的示例代碼_python
- 2023-05-30 基于CUDA?out?of?memory的一種神奇解決方式_python
- 2022-07-26 Python的基本數據類型
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支