在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

十種pandas數(shù)據(jù)編碼的方法分享

數(shù)據(jù)分析與開(kāi)發(fā) ? 來(lái)源:早起Python ? 作者:劉早起 ? 2022-05-10 15:33 ? 次閱讀

最近在知乎上看到這樣一個(gè)問(wèn)題

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

題主表示pandas用起來(lái)很亂,事實(shí)真的如此嗎?本文就將先如何利用pandas來(lái)行數(shù)據(jù)轉(zhuǎn)換/編碼的十種方案,最后再回答這個(gè)問(wèn)題。

其實(shí)這個(gè)操作在機(jī)器學(xué)習(xí)中十分常見(jiàn),很多算法都需要我們對(duì)分類特征進(jìn)行轉(zhuǎn)換(編碼),即根據(jù)某一列的值,新增(修改)一列。

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

數(shù)值型數(shù)據(jù)

讓我們先來(lái)討論連續(xù)型數(shù)據(jù)的轉(zhuǎn)換,也就是根據(jù)Score列的值,來(lái)新增一列標(biāo)簽,即如果分?jǐn)?shù)大于90,則標(biāo)記為A,分?jǐn)?shù)在80-90標(biāo)記為B,以此類推。

自定義函數(shù) + 循環(huán)遍歷

首先當(dāng)然是最簡(jiǎn)單,最笨的方法,自己寫一個(gè)函數(shù),并用循環(huán)遍歷,那肯定就是一個(gè)def加一個(gè)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])

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

有沒(méi)有更簡(jiǎn)單的辦法呢?pandas當(dāng)然提供了很多高效的操作的函數(shù),繼續(xù)往下看。

自定義函數(shù) + map

現(xiàn)在,可以使用map來(lái)干掉循環(huán)(雖然本質(zhì)上也是循環(huán))

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)

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

自定義函數(shù) + apply

如果還想簡(jiǎn)潔代碼,可以使用自定義函數(shù) + apply來(lái)干掉自定義函數(shù)

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'))))

結(jié)果和上面是一致的,只不過(guò)這么寫容易被打。

使用 pd.cut

現(xiàn)在,讓我們繼續(xù)了解更高級(jí)的pandas函數(shù),依舊是對(duì)Score進(jìn)行編碼,使用pd.cut,并指定劃分的區(qū)間后,可以直接幫你分好組

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

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

也可以直接使用labels參數(shù)來(lái)修改對(duì)應(yīng)組的名稱,是不是方便多了

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

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

使用 sklearn 二值化

既然是和機(jī)器學(xué)習(xí)相關(guān),sklearn肯定跑不掉,如果需要新增一列并判定成績(jī)是否及格,就可以使用Binarizer函數(shù),代碼也是簡(jiǎn)潔好懂

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

文本型數(shù)據(jù)

下面介紹更常見(jiàn)的,對(duì)文本數(shù)據(jù)進(jìn)行轉(zhuǎn)換打標(biāo)簽。例如新增一列,將性別男、女分別標(biāo)記為0、1

使用 replace

首先介紹replace,但要注意的是,上面說(shuō)過(guò)的自定義函數(shù)相關(guān)方法依舊是可行的

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

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

上面是對(duì)性別操作,因?yàn)橹挥心信?,所以可以手?dòng)指定0、1,但要是類別很多,也可以使用pd.value_counts()來(lái)自動(dòng)指定標(biāo)簽,例如對(duì)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

額外強(qiáng)調(diào)的是,新增一列,一定要能夠想到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

這個(gè)方法應(yīng)該很多人不知道,這就屬于上面提到的知乎問(wèn)題,能實(shí)現(xiàn)的方法太多了

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

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

使用 sklearn

同數(shù)值型一樣,這種機(jī)器學(xué)習(xí)中的經(jīng)典操作,sklearn一定有辦法,使用LabelEncoder可以對(duì)分類數(shù)據(jù)進(jìn)行編碼

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

一次性轉(zhuǎn)換兩列也是可以的

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

使用factorize

最后,再介紹一個(gè)小眾但好用的pandas方法,我們需要注意到,在上面的方法中,自動(dòng)生成的Course Name_Label列,雖然一個(gè)數(shù)據(jù)對(duì)應(yīng)一個(gè)語(yǔ)言,因?yàn)楸苊鈱懽远x函數(shù)或者字典,這樣可以自動(dòng)生成,所以大多是無(wú)序的。

如果我們希望它是有序的,也就是Python對(duì)應(yīng)0,Java對(duì)應(yīng)1,除了自己指定,還有什么優(yōu)雅的辦法?這時(shí)可以使用factorize,它會(huì)根據(jù)出現(xiàn)順序進(jìn)行編碼

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

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

結(jié)合匿名函數(shù),我們可以做到對(duì)多列進(jìn)行有序編碼轉(zhuǎn)換

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

總結(jié)

至此,我們要介紹的十種pandas數(shù)據(jù)編碼的方法就分享完畢,代碼拿走修改變量名就能用,關(guān)于這個(gè)問(wèn)題如果你有更多的方法,可以在評(píng)論區(qū)進(jìn)行留言~

現(xiàn)在回到文章開(kāi)頭的問(wèn)題,如果你覺(jué)得pandas用起來(lái)很亂,說(shuō)明你可能還未對(duì)pandas有一個(gè)全面且徹底的了解。

其實(shí)就像本文介紹數(shù)據(jù)編碼轉(zhuǎn)換一樣,確實(shí)有很多方法可以實(shí)現(xiàn)顯得很亂,但學(xué)習(xí)pandas的正確姿勢(shì)就是應(yīng)該把它當(dāng)成字典來(lái)學(xué),不必記住所有方法與細(xì)節(jié),你只需知道有這么個(gè)函數(shù)能完成這樣操作,需要用時(shí)能想到,想到再來(lái)查就行。

原文標(biāo)題:利用 Pandas 進(jìn)行分類數(shù)據(jù)編碼的十種方式!

文章出處:【微信公眾號(hào):數(shù)據(jù)分析與開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    967

    瀏覽量

    55544
  • 數(shù)據(jù)轉(zhuǎn)換

    關(guān)注

    0

    文章

    90

    瀏覽量

    18229
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4372

    瀏覽量

    64317

原文標(biāo)題:利用 Pandas 進(jìn)行分類數(shù)據(jù)編碼的十種方式!

文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    十種精密全波整流電路

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

    AD轉(zhuǎn)換中常用的十種數(shù)字濾波法

    AD轉(zhuǎn)換中常用的十種數(shù)字濾波法
    發(fā)表于 11-17 08:38

    請(qǐng)問(wèn)怎么做一個(gè)跑馬燈有十種模式,第十種模式有三音樂(lè),可加速減速和無(wú)線遙控?

    我現(xiàn)在想做一個(gè)跑馬燈,這個(gè)跑馬燈有十種模式,第十種模式要求有三音樂(lè)。,還得有數(shù)碼管顯示第幾種模式??梢詿o(wú)線遙控。求哪位大神可以幫我。小女子必有重謝。
    發(fā)表于 07-19 04:49

    pandas數(shù)據(jù)分析的方法

    pandas數(shù)據(jù)分析中常用方法
    發(fā)表于 06-03 06:16

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

    十種精密全波整流電路原圖,大家點(diǎn)評(píng)下
    發(fā)表于 11-27 06:47

    數(shù)據(jù)編碼技術(shù)

    2.2  數(shù)據(jù)編碼技術(shù)2.2.1  數(shù)字數(shù)據(jù)的數(shù)字信號(hào)編碼2.2.2  數(shù)字數(shù)據(jù)的模擬信號(hào)編碼2.2.3&nb
    發(fā)表于 06-27 21:45 ?0次下載

    十種方法能保護(hù)云數(shù)據(jù)安全

    十種方法能保護(hù)云數(shù)據(jù)安全
    發(fā)表于 01-14 12:00 ?12次下載

    基于壓縮感知的無(wú)線傳感器網(wǎng)絡(luò)的數(shù)據(jù)編碼方亮

    基于壓縮感知的無(wú)線傳感器網(wǎng)絡(luò)的數(shù)據(jù)編碼_方亮
    發(fā)表于 03-15 08:00 ?0次下載

    十種不同模式實(shí)現(xiàn)簡(jiǎn)單的計(jì)算案例

    labview作為一開(kāi)發(fā)語(yǔ)言其實(shí)有許多不同的設(shè)計(jì)模式,大家在學(xué)習(xí)工作中接觸最多當(dāng)屬狀態(tài)機(jī),今天我們就通過(guò)一個(gè)簡(jiǎn)單的計(jì)算案例用十種不同的模式來(lái)實(shí)現(xiàn),主要帶領(lǐng)大家了解不同編程模式之間的區(qū)別。
    的頭像 發(fā)表于 10-22 11:47 ?2483次閱讀
    <b class='flag-5'>十種</b>不同模式實(shí)現(xiàn)簡(jiǎn)單的計(jì)算案例

    十種復(fù)雜電路的分析方法詳細(xì)說(shuō)明

    電路問(wèn)題計(jì)算的先決條件是正確識(shí)別電路,搞清楚各部分之間的連接關(guān)系。對(duì)較復(fù)雜的電路應(yīng)先將原電路簡(jiǎn)化為等效電路,以便分析和計(jì)算。識(shí)別電路的方法很多,現(xiàn)結(jié)合具體實(shí)例介紹十種方法
    發(fā)表于 12-02 23:12 ?46次下載
    <b class='flag-5'>十種</b>復(fù)雜電路的分析<b class='flag-5'>方法</b>詳細(xì)說(shuō)明

    十種方法讓你輕松識(shí)別復(fù)雜電路

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

    原電路簡(jiǎn)化為等效電路的十種方法資料下載

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

    十種變頻器維修方法

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

    十種變頻器維修方法

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

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

    變頻器維修學(xué)習(xí)方法有很多,但方向不對(duì)努力白費(fèi),所以抓住方向很重要,為了讓大家更快的掌握變頻器維修知識(shí),這里提供變頻器維修的十種學(xué)習(xí)方法給大家。
    的頭像 發(fā)表于 05-04 18:04 ?8298次閱讀
    主站蜘蛛池模板: 天堂网在线免费 | 深点再深一点好爽好多水 | 日本韩国三级在线 | 国产三a级日本三级日产三级 | xxxx久久| 日本福利片午夜免费观着 | 欧美精品激情 | 一级毛片一级毛片 | 亚洲高清免费在线观看 | 日日噜噜夜夜狠狠久久丁香 | 亚洲xx网| 一本到午夜92版免费福利 | 手机天堂网| 天天干天天拍天天操 | 色五月婷婷成人网 | 欧美日韩国产一区 | 天天爽夜爽免费精品视频 | 免费日本视频 | 国产秦先生大战白丝97在线 | 樱桃磁力bt天堂 | 女色窝人体色77777 | 天天搞天天爽 | 亚洲干综合 | 黄到让你下面湿的视频 | 中国一级特黄剌激爽毛片 | 51vv福利视频在线精品 | 欧美成人精品一区二三区在线观看 | 人人人插| www.黄黄黄 | 四虎永久精品免费网址大全 | xxxxxxxxxxx性bbbb| 视频在线观看一区二区 | 天天干天天玩天天操 | a欧美在线 | 精品久久久久久久免费加勒比 | 婷婷在线网站 | 伊人婷婷色香五月综合缴激情 | 亚洲欧美在线一区 | 国产欧美综合在线 | 九九热在线视频观看这里只有精品 | 美女扒尿口给男人桶到爽 |