日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

c++ map用法_Pandas数据处理三板斧——map、apply、applymap详解

發(fā)布時間:2024/10/14 83 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ map用法_Pandas数据处理三板斧——map、apply、applymap详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在日常的數(shù)據(jù)處理中,經(jīng)常會對一個DataFrame進行逐行、逐列和逐元素的操作,對應(yīng)這些操作,Pandas中的map、apply和applymap可以解決絕大部分這樣的數(shù)據(jù)處理需求。這篇文章就以案例附帶圖解的方式,為大家詳細(xì)介紹一下這三個方法的實現(xiàn)原理,相信讀完本文后,不論是小白還是Pandas的進階學(xué)習(xí)者,都會對這三個方法有更深入的理解。

本文演示的數(shù)據(jù)集是模擬生成的,想練手的可以按下方的代碼生成。

boolean=[True,False] gender=["男","女"] color=["white","black","yellow"] data=pd.DataFrame({"height":np.random.randint(150,190,100),"weight":np.random.randint(40,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(15,90,100),"color":[color[x] for x in np.random.randint(0,len(color),100) ] } )

數(shù)據(jù)集如下所示,各列分別代表身高、體重、是否吸煙、性別、年齡和膚色。

Series數(shù)據(jù)處理

1. map用法

如果需要把數(shù)據(jù)集中g(shù)ender列的男替換為1,女替換為0,怎么做呢?絕對不是用for循環(huán)實現(xiàn),使用Series.map()可以很容易做到,最少僅需一行代碼。

#①使用字典進行映射 data["gender"] = data["gender"].map({"男":1, "女":0}) ? #②使用函數(shù) def gender_map(x):gender = 1 if x == "男" else 0return gender #注意這里傳入的是函數(shù)名,不帶括號 data["gender"] = data["gender"].map(gender_map)

那map在實際過程中是怎么運行的呢?請看下面的圖解(為了方便展示,僅截取了前10條數(shù)據(jù))

不論是利用字典還是函數(shù)進行映射,map方法都是把對應(yīng)的數(shù)據(jù)逐個當(dāng)作參數(shù)傳入到字典或函數(shù)中,得到映射后的值。

2. apply

同時Series對象還有apply方法,apply方法的作用原理和map方法類似,區(qū)別在于apply能夠傳入功能更為復(fù)雜的函數(shù)。怎么理解呢?一起看看下面的例子。

假設(shè)在數(shù)據(jù)統(tǒng)計的過程中,年齡age列有較大誤差,需要對其進行調(diào)整(加上或減去一個值),由于這個加上或減去的值未知,故在定義函數(shù)時,需要加多一個參數(shù)bias,此時用map方法是操作不了的(傳入map的函數(shù)只能接收一個參數(shù)),apply方法則可以解決這個問題。

def apply_age(x,bias):return x+bias ? #以元組的方式傳入額外的參數(shù) data["age"] = data["age"].apply(apply_age,args=(-3,))

可以看到age列都減了3,當(dāng)然,這里只是簡單舉了個例子,當(dāng)需要進行復(fù)雜處理時,更能體現(xiàn)apply的作用。

總而言之,對于Series而言,map可以解決絕大多數(shù)的數(shù)據(jù)處理需求,但如果需要使用較為復(fù)雜的函數(shù),則需要用到apply方法。

DataFrame數(shù)據(jù)處理

1. apply

對DataFrame而言,apply是非常重要的數(shù)據(jù)處理方法,它可以接收各種各樣的函數(shù)(Python內(nèi)置的或自定義的),處理方式很靈活,下面通過幾個例子來看看apply的具體使用及其原理。

在進行具體介紹之前,首先需要介紹一下DataFrame中axis的概念,在DataFrame對象的大多數(shù)方法中,都會有axis這個參數(shù),它控制了你指定的操作是沿著0軸還是1軸進行。axis=0代表操作對列columns進行,axis=1代表操作對行row進行,如下圖所示。

如果還不是很了解,沒關(guān)系,下面會分別對apply沿著0軸以及1軸的操作進行講解,繼續(xù)往下走。

假設(shè)現(xiàn)在需要對data中的數(shù)值列分別進行取對數(shù)和求和的操作,這時可以用apply進行相應(yīng)的操作,因為是對列進行操作,所以需要指定axis=0,使用下面的兩行代碼可以很輕松地解決我們的問題。

# 沿著0軸求和 data[["height","weight","age"]].apply(np.sum, axis=0) ? # 沿著0軸取對數(shù) data[["height","weight","age"]].apply(np.log, axis=0)

實現(xiàn)的方式很簡單,但調(diào)用apply時究竟發(fā)生了什么呢?過程是怎么實現(xiàn)的?還是通過圖解的方式來一探究竟。(取前五條數(shù)據(jù)為例)

當(dāng)沿著軸0(axis=0)進行操作時,會將各列(columns)默認(rèn)以Series的形式作為參數(shù),傳入到你指定的操作函數(shù)中,操作后合并并返回相應(yīng)的結(jié)果。

那如果在實際使用中需要按行進行操作(axis=1),那整個過程又是怎么實現(xiàn)的呢?

在數(shù)據(jù)集中,有身高和體重的數(shù)據(jù),所以根據(jù)這個,我們可以計算每個人的BMI指數(shù)(體檢時常用的指標(biāo),衡量人體肥胖程度和是否健康的重要標(biāo)準(zhǔn)),計算公式是:體重指數(shù)BMI=體重/身高的平方(國際單位kg/㎡),因為需要對每個樣本進行操作,這里使用axis=1的apply進行操作,代碼如下:

def BMI(series):weight = series["weight"]height = series["height"]/100BMI = weight/height**2return BMI ? data["BMI"] = data.apply(BMI,axis=1)

還是用圖解的方式來看看這個過程到底是怎么實現(xiàn)的(以前5條數(shù)據(jù)為例)。

當(dāng)apply設(shè)置了axis=1對行進行操作時,會默認(rèn)將每一行數(shù)據(jù)以Series的形式(Series的索引為列名)傳入指定函數(shù),返回相應(yīng)的結(jié)果。

總結(jié)一下對DataFrame的apply操作:

  • 當(dāng)axis=0時,對每列columns執(zhí)行指定函數(shù);當(dāng)axis=1時,對每行row執(zhí)行指定函數(shù)。
  • 無論axis=0還是axis=1,其傳入指定函數(shù)的默認(rèn)形式均為Series,可以通過設(shè)置raw=True傳入numpy數(shù)組。
  • 對每個Series執(zhí)行結(jié)果后,會將結(jié)果整合在一起返回(若想有返回值,定義函數(shù)時需要return相應(yīng)的值)
  • 當(dāng)然,DataFrame的apply和Series的apply一樣,也能接收更復(fù)雜的函數(shù),如傳入?yún)?shù)等,實現(xiàn)原理是一樣的,具體用法詳見官方文檔。
  • 2. applymap

    applymap的用法比較簡單,會對DataFrame中的每個單元格執(zhí)行指定函數(shù)的操作,雖然用途不如apply廣泛,但在某些場合下還是比較有用的,如下面這個例子。

    為了演示的方便,新生成一個DataFrame

    df = pd.DataFrame({"A":np.random.randn(5),"B":np.random.randn(5),"C":np.random.randn(5),"D":np.random.randn(5),"E":np.random.randn(5),} ) df

    現(xiàn)在想將DataFrame中所有的值保留兩位小數(shù)顯示,使用applymap可以很快達(dá)到你想要的目的,代碼和圖解如下:

    df.applymap(lambda x:"%.2f" % x)

    相關(guān)文章:

  • Pandas數(shù)據(jù)分析——超好用的Groupby詳解
  • Pandas數(shù)據(jù)分析——Merge數(shù)據(jù)拼接圖文詳解
  • Pandas數(shù)據(jù)處理——玩轉(zhuǎn)時間序列數(shù)據(jù)
  • Pandas數(shù)據(jù)處理——盤點那些常用的函數(shù)(上)
  • Pandas數(shù)據(jù)處理——盤點那些常用的函數(shù)(下)
  • 天秀!Pandas還能用來寫爬蟲?
  • 提高數(shù)據(jù)的顏值!一起看看Pandas中的那些Style
  • 提速百倍的Pandas性能優(yōu)化方法,讓你的Pandas飛起來!
  • 原創(chuàng)不易,如果覺得有點用,希望可以點個贊,拜謝各位老鐵!

    總結(jié)

    以上是生活随笔為你收集整理的c++ map用法_Pandas数据处理三板斧——map、apply、applymap详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。