色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

十種pandas數據編碼的方法分享

數據分析與開發 ? 來源:早起Python ? 作者:劉早起 ? 2022-05-10 15:33 ? 次閱讀

最近在知乎上看到這樣一個問題

9a4ba882-cf81-11ec-bce3-dac502259ad0.png

題主表示pandas用起來很亂,事實真的如此嗎?本文就將先如何利用pandas來行數據轉換/編碼的十種方案,最后再回答這個問題。

其實這個操作在機器學習中十分常見,很多算法都需要我們對分類特征進行轉換(編碼),即根據某一列的值,新增(修改)一列。

為了方便理解,下面創建示例DataFrame
9a5ee8de-cf81-11ec-bce3-dac502259ad0.png

數值型數據

讓我們先來討論連續型數據的轉換,也就是根據Score列的值,來新增一列標簽,即如果分數大于90,則標記為A,分數在80-90標記為B,以此類推。

自定義函數 + 循環遍歷

首先當然是最簡單,最笨的方法,自己寫一個函數,并用循環遍歷,那肯定就是一個def加一個for

df1=df.copy()

defmyfun(x):
ifx>90:
return'A'
elifx>=80andx<90:
????????return'B'
elifx>=70andx<80:
????????return'C'
elifx>=60andx<70:
????????return'D'
else:
return'E'

df1['Score_Label']=None
foriinrange(len(df1)):
df1.iloc[i,3]=myfun(df1.iloc[i,2])

這段代碼,相信所有人都能看懂,簡單好想但比較麻煩
9a734c5c-cf81-11ec-bce3-dac502259ad0.png

有沒有更簡單的辦法呢?pandas當然提供了很多高效的操作的函數,繼續往下看。

自定義函數 + map

現在,可以使用map來干掉循環(雖然本質上也是循環)

df2=df.copy()

defmapfun(x):
ifx>90:
return'A'
elifx>=80andx<90:
????????return'B'
elifx>=70andx<80:
????????return'C'
elifx>=60andx<70:
????????return'D'
else:
return'E'

df2['Score_Label']=df2['Score'].map(mapfun)

結果是同樣的
9a734c5c-cf81-11ec-bce3-dac502259ad0.png

自定義函數 + apply

如果還想簡潔代碼,可以使用自定義函數 + apply來干掉自定義函數

df3=df.copy()
df3['Score_Label']=df3['Score'].apply(lambdax:'A'ifx>90else(
'B'if90>x>=80else('C'if80>x>=70else('D'if70>x>=60else'E'))))

結果和上面是一致的,只不過這么寫容易被打。

使用 pd.cut

現在,讓我們繼續了解更高級的pandas函數,依舊是對Score進行編碼,使用pd.cut,并指定劃分的區間后,可以直接幫你分好組

df4=df.copy()
bins=[0,59,70,80,100]
df4['Score_Label']=pd.cut(df4['Score'],bins)

9a9422ba-cf81-11ec-bce3-dac502259ad0.png

也可以直接使用labels參數來修改對應組的名稱,是不是方便多了

df4['Score_Label_new']=pd.cut(df4['Score'],bins,labels=[
'low','middle','good','perfect'])

9ae84d2c-cf81-11ec-bce3-dac502259ad0.png

使用 sklearn 二值化

既然是和機器學習相關,sklearn肯定跑不掉,如果需要新增一列并判定成績是否及格,就可以使用Binarizer函數,代碼也是簡潔好懂

df5=df.copy()
binerize=Binarizer(threshold=60)
trans=binerize.fit_transform(np.array(df1['Score']).reshape(-1,1))
df5['Score_Label']=trans

9afddcb4-cf81-11ec-bce3-dac502259ad0.png

文本型數據

下面介紹更常見的,對文本數據進行轉換打標簽。例如新增一列,將性別男、女分別標記為0、1

使用 replace

首先介紹replace,但要注意的是,上面說過的自定義函數相關方法依舊是可行的

df6=df.copy()
df6['Sex_Label']=df6['Sex'].replace(['Male','Female'],[0,1])

9b0b4980-cf81-11ec-bce3-dac502259ad0.png

上面是對性別操作,因為只有男女,所以可以手動指定0、1,但要是類別很多,也可以使用pd.value_counts()來自動指定標簽,例如對Course Name列分組

df6=df.copy()
value=df6['CourseName'].value_counts()
value_map=dict((v,i)fori,vinenumerate(value.index))
df6['CourseName_Label']=df6.replace({'CourseName':value_map})['CourseName']

9b1b3a66-cf81-11ec-bce3-dac502259ad0.png

使用map

額外強調的是,新增一列,一定要能夠想到map

df7=df.copy()
Map={elem:indexforindex,eleminenumerate(set(df["CourseName"]))}
df7['CourseName_Label']=df7['CourseName'].map(Map)

9b2ad944-cf81-11ec-bce3-dac502259ad0.png

使用astype

這個方法應該很多人不知道,這就屬于上面提到的知乎問題,能實現的方法太多了

df8=df.copy()
value=df8['CourseName'].astype('category')
df8['CourseName_Label']=value.cat.codes

9b4a5f58-cf81-11ec-bce3-dac502259ad0.png

使用 sklearn

同數值型一樣,這種機器學習中的經典操作,sklearn一定有辦法,使用LabelEncoder可以對分類數據進行編碼

fromsklearn.preprocessingimportLabelEncoder
df9=df.copy()
le=LabelEncoder()
le.fit(df9['Sex'])
df9['Sex_Label']=le.transform(df9['Sex'])
le.fit(df9['CourseName'])
df9['CourseName_Label']=le.transform(df9['CourseName'])

9b59ed1a-cf81-11ec-bce3-dac502259ad0.png

一次性轉換兩列也是可以的

df9=df.copy()
le=OrdinalEncoder()
le.fit(df9[['Sex','CourseName']])
df9[['Sex_Label','CourseName_Label']]=le.transform(df9[['Sex','CourseName']])

使用factorize

最后,再介紹一個小眾但好用的pandas方法,我們需要注意到,在上面的方法中,自動生成的Course Name_Label列,雖然一個數據對應一個語言,因為避免寫自定義函數或者字典,這樣可以自動生成,所以大多是無序的。

如果我們希望它是有序的,也就是Python對應0Java對應1,除了自己指定,還有什么優雅的辦法?這時可以使用factorize,它會根據出現順序進行編碼

df10=df.copy()
df10['CourseName_Label']=pd.factorize(df10['CourseName'])[0]

9b8ca3ea-cf81-11ec-bce3-dac502259ad0.png

結合匿名函數,我們可以做到對多列進行有序編碼轉換

df10=df.copy()
cat_columns=df10.select_dtypes(['object']).columns

df10[['Sex_Label','CourseName_Label']]=df10[cat_columns].apply(
lambdax:pd.factorize(x)[0])

9ba5f3c2-cf81-11ec-bce3-dac502259ad0.png

總結

至此,我們要介紹的十種pandas數據編碼的方法就分享完畢,代碼拿走修改變量名就能用,關于這個問題如果你有更多的方法,可以在評論區進行留言~

現在回到文章開頭的問題,如果你覺得pandas用起來很亂,說明你可能還未對pandas有一個全面且徹底的了解。

其實就像本文介紹數據編碼轉換一樣,確實有很多方法可以實現顯得很亂,但學習pandas的正確姿勢就是應該把它當成字典來學,不必記住所有方法與細節,你只需知道有這么個函數能完成這樣操作,需要用時能想到,想到再來查就行

原文標題:利用 Pandas 進行分類數據編碼的十種方式!

文章出處:【微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼
    +關注

    關注

    6

    文章

    957

    瀏覽量

    54912
  • 數據轉換
    +關注

    關注

    0

    文章

    88

    瀏覽量

    18024
  • 函數
    +關注

    關注

    3

    文章

    4345

    瀏覽量

    62880

原文標題:利用 Pandas 進行分類數據編碼的十種方式!

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    十種精密全波整流電路

    十種精密全波整流電路
    發表于 08-09 15:09

    AD轉換中常用的十種數字濾波法

    AD轉換中常用的十種數字濾波法
    發表于 11-17 08:38

    請問怎么做一個跑馬燈有十種模式,第十種模式有三音樂,可加速減速和無線遙控?

    我現在想做一個跑馬燈,這個跑馬燈有十種模式,第十種模式要求有三音樂。,還得有數碼管顯示第幾種模式。可以無線遙控。求哪位大神可以幫我。小女子必有重謝。
    發表于 07-19 04:49

    pandas數據分析的方法

    pandas數據分析中常用方法
    發表于 06-03 06:16

    十種精密全波整流電路原圖分享

    十種精密全波整流電路原圖,大家點評下
    發表于 11-27 06:47

    數據編碼技術

    2.2  數據編碼技術2.2.1  數字數據的數字信號編碼2.2.2  數字數據的模擬信號編碼2.2.3&nb
    發表于 06-27 21:45 ?0次下載

    十種方法能保護云數據安全

    十種方法能保護云數據安全
    發表于 01-14 12:00 ?12次下載

    基于壓縮感知的無線傳感器網絡的數據編碼方亮

    基于壓縮感知的無線傳感器網絡的數據編碼_方亮
    發表于 03-15 08:00 ?0次下載

    十種不同模式實現簡單的計算案例

    labview作為一開發語言其實有許多不同的設計模式,大家在學習工作中接觸最多當屬狀態機,今天我們就通過一個簡單的計算案例用十種不同的模式來實現,主要帶領大家了解不同編程模式之間的區別。
    的頭像 發表于 10-22 11:47 ?2310次閱讀
    <b class='flag-5'>十種</b>不同模式實現簡單的計算案例

    十種復雜電路的分析方法詳細說明

    電路問題計算的先決條件是正確識別電路,搞清楚各部分之間的連接關系。對較復雜的電路應先將原電路簡化為等效電路,以便分析和計算。識別電路的方法很多,現結合具體實例介紹十種方法
    發表于 12-02 23:12 ?46次下載
    <b class='flag-5'>十種</b>復雜電路的分析<b class='flag-5'>方法</b>詳細說明

    十種方法讓你輕松識別復雜電路

    電路問題計算的先決條件是正確識別電路,搞清楚各部分之間的連接關系。對較復雜的電路應先將原電路簡化為等效電路,以便分析和計算。識別電路的方法很多,現結合具體實例介紹十種方法
    發表于 03-18 01:40 ?23次下載
    <b class='flag-5'>十種方法</b>讓你輕松識別復雜電路

    原電路簡化為等效電路的十種方法資料下載

    電子發燒友網為你提供原電路簡化為等效電路的十種方法資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 03-29 08:40 ?20次下載
    原電路簡化為等效電路的<b class='flag-5'>十種方法</b>資料下載

    十種變頻器維修方法

    變頻器維修學習方法有很多,但方向不對努力白費,所以抓住方向很重要,為了讓大家更快的掌握變頻器維修知識,這里提供變頻器維修的十種學習方法給大家。
    發表于 11-29 16:56 ?5131次閱讀

    十種變頻器維修方法

    變頻器維修學習方法有很多,但方向不對努力白費,所以抓住方向很重要,為了讓大家更快的掌握變頻器維修知識,這里提供變頻器維修的十種學習方法給大家。
    的頭像 發表于 04-27 12:33 ?2156次閱讀

    十種變頻器維修方法,值得收藏!

    變頻器維修學習方法有很多,但方向不對努力白費,所以抓住方向很重要,為了讓大家更快的掌握變頻器維修知識,這里提供變頻器維修的十種學習方法給大家。
    的頭像 發表于 05-04 18:04 ?7817次閱讀
    主站蜘蛛池模板: 97精品一区二区视频在线观看 | 久草国产在线播放 | 俄罗斯性孕妇孕交 | 久久一er精这里有精品 | 少妇伦子伦情品无吗 | 交换娇妻呻吟声不停中文字幕 | 1V1各种PLAY女主被肉 | 国产精品久久久久久久AV下载 | 日日干夜夜啪蕉视频 | 亚洲理论在线a中文字幕 | 男人插曲视频大全免费网站 | 中文字幕无线观看不卡网站 | 一区二区视频在线观看高清视频在线 | 男女夜晚在爽视频免费观看 | 木凡的天空在线收听 | 玛雅成人网 | 久久久久琪琪精品色 | 久久国产av偷拍在线 | 免费看欧美一级特黄a大片 免费看欧美xxx片 | 澳大利亚剧满足在线观看 | 成人在免费视频手机观看网站 | 黑人巨大两根一起挤进欧美 | 快播黄色电影 | 亚洲精品线在线观看 | 视频在线免费观看 | 在线观看免费国产成人软件 | 日本漫画母亲口工子全彩 | 亚洲精品天堂无码中文字幕影院 | 性色AV一区二区三区咪爱四虎 | 1234成人网 | 春药按摩人妻中文字幕 | 伊人久久中文大香线蕉综合 | 亚洲精品无码AAAAAA片 | 扒开腿狂躁女人GIF动态图 | 亚洲一区在线观看视频 | 快播av种子大全 | 国产三级级在线电影 | 色狐直播免费观看 | 92电影网午夜福利 | 好大太快了快插穿子宫了 | 97精品伊人久久大香线蕉app |