欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Pandas對(duì)數(shù)據(jù)進(jìn)行篩選和排序的實(shí)現(xiàn)

 更新時(shí)間:2019年07月29日 14:46:52   作者:g863402758  
這篇文章主要介紹了使用Pandas對(duì)數(shù)據(jù)進(jìn)行篩選和排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

篩選和排序是Excel中使用頻率最多的功能,通過(guò)這個(gè)功能可以很方便的對(duì)數(shù)據(jù)表中的數(shù)據(jù)使用指定的條件進(jìn)行篩選和計(jì)算,以獲得需要的結(jié)果。在Pandas中通過(guò).sort和.loc函數(shù)也可以實(shí)現(xiàn)這兩 個(gè)功能。.sort函數(shù)可以實(shí)現(xiàn)對(duì)數(shù)據(jù)表的排序操作,.loc函數(shù)可以實(shí)現(xiàn)對(duì)數(shù)據(jù)表的篩選操作。本篇文章將介紹如果通過(guò)Pandas的這兩個(gè)函數(shù)完成Excel中的篩選和排序操作。

首選導(dǎo)入需要使用的Pandas庫(kù)和numpy庫(kù),讀取并創(chuàng)建數(shù)據(jù)表,將數(shù)據(jù)表命名為lc。

import pandas as pd
import numpy as np
lc=pd.DataFrame(pd.read_csv('LoanStats3a.csv',header=1))

創(chuàng)建數(shù)據(jù)表后,開始使用Pandas的.sort函數(shù)對(duì)數(shù)據(jù)表進(jìn)行排序操作,下面是Pandas官方對(duì).sort函數(shù)語(yǔ)法和使用方法的說(shuō)明。.sort函數(shù)主要包含6個(gè)參數(shù),columns為要進(jìn)行排序的列名稱, ascending為排序的方式true為升序,F(xiàn)alse為降序,默認(rèn)為true。axis為排序的軸,0表示index,1表示columns,當(dāng)對(duì)數(shù)據(jù)列進(jìn)行排序時(shí),axis必須設(shè)置為0。inplace默認(rèn)為False,表示對(duì)數(shù)據(jù) 表進(jìn)行排序,不創(chuàng)建新實(shí)例。Kind可選擇排序的方式,如快速排序等。na_position對(duì)NaN值的處理方式,可以選擇first和last兩種方式,默認(rèn)為last,也就是將NaN值放在排序的結(jié)尾。

在了解了.sort函數(shù)的語(yǔ)法和使用方法后,我們開始使用這個(gè)函數(shù)對(duì)數(shù)據(jù)進(jìn)行排序操作,數(shù)據(jù)源來(lái)自Lending Club 2017-2011年的公開數(shù)據(jù)。首先對(duì)單列數(shù)據(jù)進(jìn)行排序。

對(duì)單列數(shù)據(jù)進(jìn)行排序

升序

單列數(shù)據(jù)的排序的方法很簡(jiǎn)單,按照.sort函數(shù)中的介紹,寫清楚要排序的數(shù)據(jù)表名稱,以及要進(jìn)行排序的列名稱即可。具體的代碼和排序結(jié)果如下所示,其中l(wèi)c是前面我們讀取并創(chuàng)建的數(shù)據(jù)表名稱,loan_amnt是要進(jìn)行排序的列名稱。這里我們對(duì)lc數(shù)據(jù)表按loan_amnt列進(jìn)行升序排列。這里需要說(shuō)明的是ascending參數(shù)的默認(rèn)值是True,也就是升序。因此下面的兩種寫法效果是一樣的 。

lc.sort(["loan_amnt"])
lc.sort(["loan_amnt"],ascending=True)

降序

將ascending參數(shù)的值改為False就完成對(duì)數(shù)據(jù)表的降序排列工作。與升序排列的數(shù)據(jù)表相比可以發(fā)現(xiàn)升序排列將loan_amnt列的最小值放在了前面,因此我們可以判斷l(xiāng)oan_amnt的最小金額為500,與之相反,降序排列將最大值放在了前面,因此loan_amnt的最大金額應(yīng)該為35000。這里我們沒有設(shè)置na_position參數(shù)的值,因此按默認(rèn)情況loan_amnt列的NaN值在排序的結(jié)尾顯示。以下顯示了降序排列的代碼和結(jié)果。

lc.sort(["loan_amnt"],ascending=False)

對(duì)多列數(shù)據(jù)進(jìn)行排序

除了對(duì)單列數(shù)據(jù)進(jìn)行排序以外,.sort函數(shù)還可以對(duì)多列數(shù)據(jù)進(jìn)行排序操作。下面我們分別對(duì)loan_amnt和int_rate字段進(jìn)行降序排列,以下是具體的代碼和排序結(jié)果,與單列數(shù)據(jù)排序的代碼相比,這里只增加了一個(gè)新的列名稱int_rate。

lc.sort(["loan_amnt","int_rate"],ascending=False)

我們將需要排序的兩個(gè)列名稱互換位置,再次執(zhí)行降序排列操作。觀察兩次的排序結(jié)果可以發(fā)現(xiàn),這次的結(jié)果與之前的結(jié)果有一些差異。Loan_amnt字段的排序結(jié)果有些混亂,有些較小的值排在了較大值的前面。這是因?yàn)榈谝淮闻判驎r(shí)loan_amnt是第一排序字段,int_rate是第二排序字段。兩個(gè)字段交換位置第二次排序后,int_rate變成了第一排序字段,loan_amnt變成了第二排序字段 。

lc.sort(["int_rate","loan_amnt"],ascending=False)

獲取金額最小前10項(xiàng)

在完成了對(duì)數(shù)據(jù)表排序的操作后,我們可以對(duì)數(shù)據(jù)表進(jìn)行簡(jiǎn)單的篩選,例如獲取loan_amnt金額最小的前10名數(shù)據(jù)。具體的方法是先對(duì)lc數(shù)據(jù)表按loan_amnt升序排列,然后取前10名的數(shù)據(jù)。NaN值默認(rèn)在排序結(jié)果的結(jié)尾顯示。以下是具體代碼和結(jié)果。與前面單列升序排列的代碼相比只在結(jié)尾增加了.head()函數(shù)。

lc.sort(["loan_amnt"],ascending=True).head(10)

獲取金額最大前10項(xiàng)

獲取金額最大前10項(xiàng)的代碼與獲取金額最小前10項(xiàng)略有差異,本來(lái)我們只需要復(fù)制前面的代碼,然后將.head()函數(shù)改為tail()函數(shù)即可,但由于NaN值在排序的尾部,因此,我們將lc數(shù)據(jù)表按loan_amnt按降序排列,并取排名前10的數(shù)據(jù)。當(dāng)然這并不是唯一的方法,我們還可以通過(guò)放棄NaN值的排序或者將NaN值在排序前部顯示來(lái)解決這個(gè)問(wèn)題。以下是具體的代碼和執(zhí)行結(jié)果。

lc.sort(["loan_amnt"],ascending=False).head(10)

介紹完排序功能后再來(lái)看下篩選,在篩選功能上Pandas使用的是.loc函數(shù)。以下是Pandas官方對(duì).loc函數(shù)的語(yǔ)法和使用方法的說(shuō)明。

單列數(shù)據(jù)篩選并排序

我們使用.loc對(duì)lc數(shù)據(jù)表中g(shù)rade列為B值的數(shù)據(jù)條目進(jìn)行了篩選操作,具體的代碼和篩選結(jié)果如下。在代碼中l(wèi)c.loc[]是.loc函數(shù)的語(yǔ)法,lc[“grade”] == “B”是具體的篩選條件。由于數(shù)據(jù)表較大,因此在最后使用了head()函數(shù)只顯示前5行篩選結(jié)果。從篩選結(jié)果來(lái)看grade列的值都為B。

lc.loc[lc["grade"] == "B"].head()

篩選條件除了”等于”(==)以外,還可以使用”不等于”(!=)來(lái)排除列中特定的值。我們使用”不等于”來(lái)篩選grade列中不是B值的數(shù)據(jù)條目。以下是具體的代碼和篩選結(jié)果,可以看到篩選結(jié)果中的grade列里已經(jīng)不包含B值了。

lc.loc[lc["grade"] != "B"].head()

很多時(shí)候我們只關(guān)注數(shù)據(jù)表中某幾列的數(shù)據(jù),這時(shí)可以在前面篩選代碼的基礎(chǔ)上增加要顯示的列名稱和顯示順序。下面是具體的代碼和篩選結(jié)果。代碼部分與之前相比增加了要顯示的列名稱 [“member_id”, “l(fā)oan_amnt”, “grade”]。其余部分均沒有改變。在篩選結(jié)果的數(shù)據(jù)表中可以看到僅顯示了我們?cè)诖a中列出的三列。

lc.loc[lc["grade"] == "B", ["member_id", "loan_amnt", "grade"]].head()

若要對(duì)篩選結(jié)果進(jìn)行排序可以聯(lián)合使用.loc函數(shù)和.sort函數(shù)。下面的代碼中首先對(duì)數(shù)據(jù)表的grade列進(jìn)行篩選,選擇所有值為B的數(shù)據(jù),并限定了結(jié)果中要顯示的三列的名稱。最后對(duì)篩選出的結(jié)果按loan_amnt的金額進(jìn)行升序排序。

lc.loc[lc["grade"] == "B", ["member_id", "loan_amnt", "grade"]].sort(["loan_amnt"])

在代碼后面增加ascending參數(shù),并將值設(shè)置為False就可實(shí)現(xiàn)對(duì)篩選結(jié)果的降序排列。以下為具體的代碼和篩選及排序結(jié)果。

lc.loc[lc["grade"] != "B", ["member_id", "loan_amnt", "grade"]].sort(["loan_amnt"],ascending=False)

多列數(shù)據(jù)篩選并排序

Pandas的.loc參數(shù)還可以同時(shí)對(duì)多列數(shù)據(jù)進(jìn)行篩選,并且支持不同篩選條件邏輯組合。常用的篩選條件包括”等于”(==)”,不等于”(!),”大于”(>)”,小于”(<)”,大于等于”(>=)” ,小于等于”(<=)等等。邏輯組合包括”與”()和”或”()。下面我們將通過(guò)3條多列數(shù)據(jù)篩選代碼逐一進(jìn)行介紹。

第一條代碼使用”與”邏輯,篩選出了grade等于B,并且loan_amnt金額大于5000的數(shù)據(jù)。并限定了顯示的列名稱。從篩選結(jié)果中可以看出grade列的值都是B,loan_amnt的金額均大于5000。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"]>5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].head()

第二條代碼也使用”與”邏輯,篩選出了grade不等于B,并且loan_status不等于Charged Off的數(shù)據(jù),同時(shí)也限定了顯示的列名稱。從篩選結(jié)果中看grade列不包含B值,并且loan_status列不包含Charged Off值。

lc.loc[(lc["grade"] != "B") & (lc["loan_status"] != "Charged Off"),["member_id", "term" , "loan_amnt", "grade", "sub_grade", "loan_status"]].head()

第三條代碼使用了”或”邏輯,篩選出了grade列值為B,或loan_amnt列金額大于5000的數(shù)據(jù),同時(shí)也限定了顯示的列名稱。從篩選結(jié)果來(lái)看,grade列除了B值以外還保留了其他的值,而這些值在loan_amnt列的金額均大于5000。換句話說(shuō),一條數(shù)據(jù)只要grade列或loan_amnt列任意之一符合篩選條件,這條數(shù)據(jù)就會(huì)被顯示。

lc.loc[(lc["grade"] == "B") | (lc["loan_amnt"] > 5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].head()

多列篩選也可以進(jìn)行排序,方法與單列篩選后排序基本一樣,下面的代碼對(duì)多列篩選后的結(jié)果按loan_amnt列進(jìn)行升序排序。由于篩選條件中限定了loan_amnt列的值要大于5000,因此排序的結(jié)果從5020開始。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"] > 5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].sort(["loan_amnt"])

對(duì)多列篩選結(jié)果進(jìn)行降序排序只需在前面升序排序代碼的基礎(chǔ)上增加ascending參數(shù),并將值設(shè)定為False即可。下面是多列篩選后降序排序的代碼和結(jié)果。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"] > 5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].sort(["loan_amnt"],ascending=False)

無(wú)論是”與”條件,還是”或”條件都可以在篩選后使用排序。下面代碼是對(duì)使用了“或”邏輯條件的篩選結(jié)果進(jìn)行降序排序的代碼和結(jié)果。

lc.loc[(lc["grade"] == "B") | (lc["loan_amnt"] > 5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].sort(["loan_amnt"],ascending=False)

Pandas中的排序和篩選基本介紹完了,在實(shí)際的分析工作中,篩選只是分析過(guò)程中的一個(gè)步驟,很多時(shí)候我們還需要對(duì)篩選后的結(jié)果進(jìn)行匯總,例如求和,計(jì)數(shù),或計(jì)算均值等等。也就是Excel中常用的sumifs和countifs函數(shù)。

按篩選條件求和(sumif, sumifs)

在單列篩選的代碼后增加求和條件就相當(dāng)于Excel中的sumif函數(shù)的功能。下面的代碼在單列篩選的代碼后增加了.loan_amnt.sum()的求和字段,表示對(duì)數(shù)據(jù)表中所有g(shù)rade列值為B的loan_amnt金額求和。

lc.loc[lc["grade"] == "B",].loan_amnt.sum()


除了包含條件外,也可以對(duì)排除某一條件的數(shù)據(jù)求和。下面的代碼與之前的正好相反,對(duì)數(shù)據(jù)表中所有g(shù)rade列值不為B的loan_amnt金額求和。

lc.loc[lc["grade"] != "B",].loan_amnt.sum()

增加一個(gè)篩選條件就變成了Excel中的sumifs函數(shù)的功能。下面的代碼中分別使用了兩個(gè)條件對(duì)數(shù)據(jù)表進(jìn)行篩選,并對(duì)最后的loan_amnt金額進(jìn)行求和。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"] > 5000)].loan_amnt.sum()

按篩選條件計(jì)數(shù)(countif, countifs)

將前面的.sum()函數(shù)換為.count()函數(shù)就變成了Excel中的countif函數(shù)的功能,下面的代碼對(duì)數(shù)據(jù)表中g(shù)rade列值為B的loan_amnt筆數(shù)進(jìn)行計(jì)數(shù)。

lc.loc[lc["grade"] == "B"].loan_amnt.count()

與前面代碼相反,下面的代碼對(duì)數(shù)據(jù)表中g(shù)rade列值不為B的所有l(wèi)oan_amnt筆數(shù)進(jìn)行計(jì)數(shù)。

lc.loc[lc["grade"] != "B"].loan_amnt.count()

增加篩選條件,變成了Excel中的countifs函數(shù)的功能,下面的代碼對(duì)數(shù)據(jù)表中g(shù)rade列值為B,并且loan_amnt金額額大于5000的loan_amnt筆數(shù)進(jìn)行計(jì)數(shù)。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"] > 5000)].loan_amnt.count()

按篩選條件計(jì)算均值(averageif, averageifs)

有了sumifs和countifs,當(dāng)然也少不了averageifs,在Pandas中.mean()是用來(lái)計(jì)算均值的函數(shù),將.sum()和.count()替換為.mean()。就是pandas版的averageif和averageifs。下面的代碼中計(jì)算了數(shù)據(jù)表中g(shù)rade列值為B的loan_amnt金額均值。相當(dāng)于Excel中的averageif函數(shù)的功能。

lc.loc[lc["grade"] == "B"].loan_amnt.mean()

與前面的代碼證號(hào)相反,下面的代碼計(jì)算了數(shù)據(jù)表中所有g(shù)rade列值不為B的loan_amnt金額均值。

lc.loc[lc["grade"] != "B"].loan_amnt.mean()

增加一個(gè)篩選條件變成了Excel中的averageifs,不過(guò)這里好像又有一些不同,Excel中的sumifs,countifs和averageifs的計(jì)算邏輯是滿足滿足所有指定條件時(shí),才對(duì)這些單元格進(jìn)行求和或計(jì)數(shù)。而在下面的代碼中我們使用了或條件,就是說(shuō)只要滿足兩個(gè)條件中的任意一個(gè)都會(huì)進(jìn)行計(jì)算。

lc.loc[(lc["grade"] == "B") | (lc["loan_amnt"] > 5000)].loan_amnt.mean()

按篩選條件獲取最大值和最小值

最后兩個(gè)是Excel中沒有的函數(shù)功能,就是對(duì)篩選后的數(shù)據(jù)表計(jì)算最大值和最小值。方法很簡(jiǎn)單,將之前的sum()和count()換成max()和min()函數(shù)即可。下面是具體的代碼和結(jié)果。

這條代碼是計(jì)算數(shù)據(jù)表中g(shù)rade列值為B的loan_amnt最大金額。

lc.loc[lc["grade"] == "B"].loan_amnt.max()

這條代碼是計(jì)算數(shù)據(jù)表中g(shù)rade列值不為B的loan_amnt最小金額。

lc.loc[lc["grade"] != "B"].loan_amnt.min()

以上這些也同樣支持多條篩選后的計(jì)算,在此就不逐一列出了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python解析CDD文件的代碼詳解

    Python解析CDD文件的代碼詳解

    這篇文章主要介紹了Python解析CDD文件的方法,使用Python 腳本解析CDD文件,統(tǒng)一定義,一鍵生成,十分快捷,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • python批量修改ssh密碼的實(shí)現(xiàn)

    python批量修改ssh密碼的實(shí)現(xiàn)

    這篇文章主要介紹了python批量修改ssh密碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Pytorch搭建yolo3目標(biāo)檢測(cè)平臺(tái)實(shí)現(xiàn)源碼

    Pytorch搭建yolo3目標(biāo)檢測(cè)平臺(tái)實(shí)現(xiàn)源碼

    這篇文章主要為大家介紹了Pytorch搭建yolo3目標(biāo)檢測(cè)平臺(tái)實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python操作ini類型配置文件的實(shí)例教程

    python操作ini類型配置文件的實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于python操作ini類型配置文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python繪制正二十面體圖形示例

    Python繪制正二十面體圖形示例

    正二十面體由20個(gè)小的正三角形面組成,每個(gè)頂點(diǎn)周圍有?5?個(gè)頂點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Python繪制正二十面體圖形的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • python實(shí)現(xiàn)基于信息增益的決策樹歸納

    python實(shí)現(xiàn)基于信息增益的決策樹歸納

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)基于信息增益的決策樹歸納,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 深入理解Python3中的http.client模塊

    深入理解Python3中的http.client模塊

    這篇文章主要介紹了關(guān)于Python3中http.client模塊的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • python實(shí)現(xiàn)打印類的所有屬性和方法

    python實(shí)現(xiàn)打印類的所有屬性和方法

    這篇文章主要介紹了python實(shí)現(xiàn)打印類的所有屬性和方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python模擬登錄12306的方法

    Python模擬登錄12306的方法

    這篇文章主要介紹了Python模擬登錄12306的方法,是非常實(shí)用的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • Python內(nèi)置函數(shù)—vars的具體使用方法

    Python內(nèi)置函數(shù)—vars的具體使用方法

    本篇文章主要介紹了Python內(nèi)置函數(shù)—vars的具體使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12

最新評(píng)論