成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python成績排序函數(shù) Python的排序函數(shù)

如何對python編程中的列表元素按成績高低進(jìn)行排序呢?

最簡單的辦法就是需要指定列表排序方法中的參數(shù)“key”。代碼如下:

專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)沙洋免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

第一種:

stu=[['john',79],['mame',96],['herry',85],['lili',95],['ziling',63]]

def takeSecond(elem):

return elem[1]

stu.sort(key=takeSecond,,reverse=True)

print(stu)

第二種:

stu=[['john',79],['mame',96],['herry',85],['lili',95],['ziling',63]]

s=sorted(stu,key=lambda student: student[1],,reverse=True)

print(s)

Python其實(shí)很簡單 第二十一章 DataFrame數(shù)據(jù)處理

將Excel中的的數(shù)據(jù)讀入數(shù)據(jù)框架DataFrame后,可以非常方便的進(jìn)行各種數(shù)據(jù)處理。

21.1 列間求和

求總分(總分=語文+數(shù)學(xué)+英語)

對于上一章所提到的學(xué)生成績表,僅用一個(gè)語句即可完成總分計(jì)算,并填充。

df['總分']=df['語文']+df['數(shù)學(xué)']+df['英語']

完整代碼如下:

from pandas import read_excel

file='d:/student.xlsx' #見第18章表18-1

df=read_excel(file,sheet_name=0,converters={'學(xué)號':str})

df['總分']=df['語文']+df['數(shù)學(xué)']+df['英語']

print(df.head()) #df.head()的作用是僅顯示5行記錄。

運(yùn)行結(jié)果如下:

序號 學(xué)號 姓名 年級 班級 語文 數(shù)學(xué) 英語 總分 名次

0 1 070101 王博宇 NaN NaN 84 71 93 248 NaN

1 2 070102 陳冠濤 NaN NaN 89 89 89 267 NaN

2 3 070103 李文博 NaN NaN 89 72 76 237 NaN

3 4 070204 姜海燕 NaN NaN 89 89 89 267 NaN

4 5 070205 林若溪 NaN NaN 91 95 83 269 NaN

21.2替換

既可以將對滿足條件的行和列的數(shù)據(jù)替換,也可以對整個(gè)集合的數(shù)據(jù)按照條件進(jìn)行替換。

df['總分'].replace(310,'x',inplace=True)

將總分列的數(shù)值“310”替換為“x”。inplace=True表示改變原數(shù)據(jù)。

df.replace(76,0,inplace=True)

將整個(gè)DataFrame中的數(shù)值“76”替換為“0”。

df.replace([98,76,99],0,inplace=True)

將整個(gè)DataFrame中的數(shù)值“98,76,99”一次替換為“0”。

21.2排序

既可以將某一列作為關(guān)鍵字段排序,也可以將幾個(gè)列分別作為主、次關(guān)鍵字段進(jìn)行排序。排序既可以按升序排序,也可以按降序排序。

函數(shù)sort_values()的語法格式如下:

df.sort_values(by=[“col1”,”col2”,......,”coln”],ascending=False)

其中,coln表示列名,也可以是列名的列表;ascending表示排序方式,值為True表示升序,可以省缺,值為False表示降序。

如:

df=df.sort_values(by=['總分'],ascending=False)

表示按照“總分”從高到低排序。

df=df.sort_values(by=['總分','語文'],ascending=False)

表示按照“總分”從高到低排序,若“總分”相同,再按照“語文”成績從高到低排序。

21.3 字段截取

函數(shù)slice()可以從某列中截取字符串。格式如下:

slice(start,stop)

其中,start表示開始位置;stop表示結(jié)束位置

例:

df['年級']=df['學(xué)號'].str.slice(0,2)

通過此語句可以截取學(xué)號字段的第1、2個(gè)字符,并賦值給年級字段。

21.4 記錄抽取

可以抽取滿足條件的記錄。

例:抽取總分300的記錄。

df[df.總分300]

抽取總分在300到310之間(包括300和310)的記錄。

df[df.總分.between(306,310)]

抽取學(xué)號中包含“0803”的記錄。這樣可以非常方便的抽取某個(gè)班的信息。

df[df.學(xué)號.str.contains('0803',na=False)]

此處的na=False,含義是如遇到NaN這樣的數(shù)據(jù),直接做不匹配處理。

21.5修改記錄

1、整列替換

我們在前面已經(jīng)給整列填充過數(shù)據(jù),填充時(shí)原來的數(shù)據(jù)就被覆蓋了。

即如下語句:

df['總分']=df['語文']+df['數(shù)學(xué)']+df['英語']

2、個(gè)別修改

如將值‘99’替換為值‘100’,可用如下語句:

df.replace('99','100')

將指定列的值替,如將語文列和英語列的值‘99’替換為值‘100’,可用如下語句:

df.replace({'語文':99,'英語':99},100)

可用如下程序去驗(yàn)證:

from pandas import read_excel

file='d:/student.xlsx'

df=read_excel(file,sheet_name=0,converters={'學(xué)號':str})

print(df[(df.語文==99) |(df.英語==99)])

df=df.replace({'語文':99,'英語':99},100)

print(df[(df.語文==99) |(df.英語==99)])

運(yùn)行結(jié)果為:

序號 學(xué)號 姓名 年級 班級 語文 數(shù)學(xué) 英語 總分 名次

28 29 090802 丁能通 09 NaN 119 120 99 338 NaN

29 30 090203 沈丹妮 09 NaN 109 108 99 316 NaN

Empty DataFrame

Columns: [序號, 學(xué)號, 姓名, 年級, 班級, 語文, 數(shù)學(xué), 英語, 總分, 名次]

Index: []

可以看出,第一個(gè)print()語句輸出的結(jié)果中滿足條件“語文或英語為99分”的有兩條記錄,替換語句執(zhí)行以后,df中再?zèng)]有滿足條件“語文或英語為99分”的記錄了。

21.6記錄合并

函數(shù)concat()的格式如下:

concat([dataFrame1,dataFrame2,......],ignore_index=True)

其中,dataFrame1等表示要合并的DataFrame數(shù)據(jù)集合;ignore_index=True表示合并之后的重新建立索引。其返回值也是DataFrame類型。

concat()函數(shù)和append()函數(shù)的功能非常相似。

例:

import pandas #導(dǎo)入pandas模塊

from pandas import read_excel #導(dǎo)入read_execel

file='d:/student.xlsx' #變量file表示文件路徑,注意'/'的用法 數(shù)據(jù)見第18章表18-1

df=read_excel(file,sheet_name=0,converters={'學(xué)號':str})

# 將Excel文件導(dǎo)入到DataFrame變量中

df=df[:5] #截取df的前5個(gè)記錄

print(df) #輸出df

df1=df[:3] #截取df的前3個(gè)記錄存入df1中

df2=df[3:5] #截取df的最后2個(gè)記錄存入df2中

df3=pandas.concat([df2,df1]) #將df2與df1合并存入df3中

print(df3) #輸出df3

運(yùn)行結(jié)果如下:

序號 學(xué)號 姓名 年級 班級 語文 數(shù)學(xué) 英語 總分 名次

0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN

1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN

2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN

3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN

4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN

序號 學(xué)號 姓名 年級 班級 語文 數(shù)學(xué) 英語 總分 名次

3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN

4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN

0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN

1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN

2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN

由于合并時(shí)是將df1合并到df2中,可以看出,索引仍然保持原來的狀態(tài)。

21.7統(tǒng)計(jì)次數(shù)

可以用如下方法統(tǒng)計(jì)出某個(gè)值在某行或者某個(gè)范圍出現(xiàn)的次數(shù)。

from pandas import read_excel

file='d:/student.xlsx'

df=read_excel(file,sheet_name=0,converters={'學(xué)號':str})

df=df[:5]

print(df)

print(df['語文'].value_counts())

輸出結(jié)果如下:

序號 學(xué)號 姓名 年級 班級 語文 數(shù)學(xué) 英語 總分 名次

0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN

1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN

2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN

3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN

4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN

89 3

84 1

91 1

Name: 語文, dtype: int64

可以看出,通過value_counts()函數(shù)可以統(tǒng)計(jì)出列中各值出現(xiàn)的次數(shù)。

value_counts()函數(shù)的參數(shù)還有 :

ascending,當(dāng)ascending=True時(shí)升序排列,當(dāng)ascending=False時(shí)升序排列(此時(shí)該參數(shù)可省缺);

normalize,當(dāng)normalize=True時(shí),顯示的不再是各值出現(xiàn)的次數(shù),而是占比。

將上例中的語句print(df['語文'].value_counts())改為:

print(df['語文'].value_counts(ascending=True,normalize=True))

則輸出結(jié)果變成了:

91 0.2

84 0.2

89 0.6

Name: 語文, dtype: float64

21.8按值查找

print(df['語文'].isin([84,91]))

它的作用是查找‘語文’列中值和isin所指的列表中元素一致的記錄,如果找到結(jié)果為True,否則為False。

輸出結(jié)果:

0 True

1 False

2 False

3 False

4 True

Name: 語文, dtype: bool

21.9數(shù)據(jù)分區(qū)

根據(jù)某個(gè)分區(qū)標(biāo)準(zhǔn),將數(shù)據(jù)按照所屬區(qū)域進(jìn)行劃分,并用相應(yīng)的標(biāo)簽表示,可以用cut()方法來實(shí)現(xiàn)。

語法格式如下:

cut(series, bins, right=True, labels=NULL)

其中:

series表示需要分組的數(shù)據(jù);

bins表示分組的依據(jù),是一個(gè)列表,其元素為劃分分區(qū)的邊界值,如[0,72,96,120],就是劃分3個(gè)分區(qū),即0~72、72~96、96~120,默認(rèn)的是“左包右不包”;

right表示分組時(shí)右邊是否閉合;

labels表示分組的自定義標(biāo)簽,也可以不重新定義。

下面對上述學(xué)生成績表中的語文成績進(jìn)行分組,并增加一個(gè)新的列“語文等級”。

import pandas as pd

from pandas import read_excel #導(dǎo)入read_execel

file='d:/student.xlsx'

df=read_excel(file,sheet_name=0,converters={'學(xué)號':str})

df['年級']=df['學(xué)號'].str.slice(0,2)

df['班級']=df['學(xué)號'].str.slice(0,4)

df.總分=df.語文+df.數(shù)學(xué)+df.英語

bins=[0,72,96,max(df.語文)+1] #

lab=['不及格','及格','優(yōu)秀']

grade=pd.cut(df.語文,bins,right=False,labels=lab)

df['語文等級']=grade

print(df.head())

print("語文成績分等級統(tǒng)計(jì)結(jié)果:")

print(df['語文等級'].value_counts())

運(yùn)行結(jié)果如下:

序號 學(xué)號 姓名 年級 班級 語文 數(shù)學(xué) 英語 總分 語文等級

0 1 070101 王博宇 07 0701 84 71 93 248 及格

1 2 070102 陳冠濤 07 0701 89 89 89 267 及格

2 3 070103 李文博 07 0701 89 72 76 237 及格

3 4 070204 姜海燕 07 0702 89 89 89 267 及格

4 5 070205 林若溪 07 0702 91 95 83 269 及格

語文成績分等級統(tǒng)計(jì)結(jié)果:

及格 17

優(yōu)秀 10

不及格 4

Name: 語文等級, dtype: int64

Python3 sort()函數(shù)與sorted()函數(shù)排序

Python使用過程隨記~

sort()函數(shù)與sorted()函數(shù)的區(qū)別:

sort是list的方法,而sorted可以對所有可迭代對象進(jìn)行排序(字典,元組等);

sort方法返回的是對已經(jīng)存在的列表進(jìn)行操作,會改變原有列表的值;而sorted是新建一個(gè)新的list,不改變原有的值。

一.list sort()方法

語法:

key:主要是用來比較的參數(shù),指定對象中的一個(gè)對象用來進(jìn)行排序。

reserve:默認(rèn)值為reserve=False升序,reserve=True降序。

無返回值,通常如下:

指定列表中的元素排序來輸出:

二.sorted

語法:

iterable:可迭代對象

key:主要是用來比較的參數(shù),指定對象中的一個(gè)對象用來進(jìn)行排序。

reserve:默認(rèn)值為reserve=False升序,reserve=True降序。

利用key進(jìn)行倒序排序:

或者通過reserve參數(shù),與sort()函數(shù)一致。

若列表內(nèi)元素為字典/元組,還可以通過key指定來排序:

深入理解python中的排序sort

進(jìn)行一個(gè)簡單的升序排列直接調(diào)用sorted()函數(shù),函數(shù)將會返回一個(gè)排序后的列表:

sorted函數(shù)不會改變原有的list,而是返回一個(gè)新的排好序的list

如果你想使用就地排序,也就是改變原list的內(nèi)容,那么可以使用list.sort()的方法,這個(gè)方法的返回值是None。

另一個(gè)區(qū)別是,list.sort()方法只是list也就是列表類型的方法,只可以在列表類型上調(diào)用。而sorted方法則是可以接受任何可迭代對象。

list.sort()和sorted()函數(shù)都有一個(gè)key參數(shù),可以用來指定一個(gè)函數(shù)來確定排序的一個(gè)優(yōu)先級。比如,這個(gè)例子就是根據(jù)大小寫的優(yōu)先級進(jìn)行排序:

key參數(shù)的值應(yīng)該是一個(gè)函數(shù),這個(gè)函數(shù)接受一個(gè)參數(shù)然后返回以一個(gè)key,這個(gè)key就被用作進(jìn)行排序。這個(gè)方法很高效,因?yàn)閷τ诿恳粋€(gè)輸入的記錄只需要調(diào)用一次key函數(shù)。

一個(gè)常用的場景就是當(dāng)我們需要對一個(gè)復(fù)雜對象的某些屬性進(jìn)行排序時(shí):

再如:

前面我們看到的利用key-function來自定義排序,同時(shí)Python也可以通過operator庫來自定義排序,而且通常這種方法更好理解并且效率更高。

operator庫提供了 itemgetter(), attrgetter(), and a methodcaller()三個(gè)函數(shù)

同時(shí)還支持多層排序

list.sort()和sorted()都有一個(gè)boolean類型的reverse參數(shù),可以用來指定升序和降序排列,默認(rèn)為false,也就是升序排序,如果需要降序排列,則需將reverse參數(shù)指定為true。

排序的穩(wěn)定性指,有相同key值的多個(gè)記錄進(jìn)行排序之后,原始的前后關(guān)系保持不變

我們可以看到python中的排序是穩(wěn)定的。

我們可以利用這個(gè)穩(wěn)定的特性來進(jìn)行一些復(fù)雜的排序步驟,比如,我們將學(xué)生的數(shù)據(jù)先按成績降序然后年齡升序。當(dāng)排序是穩(wěn)定的時(shí)候,我們可以先將年齡升序,再將成績降序會得到相同的結(jié)果。

傳統(tǒng)的DSU(Decorate-Sort-Undecorate)的排序方法主要有三個(gè)步驟:

因?yàn)樵M是按字典序比較的,比較完grade之后,會繼續(xù)比較i。

添加index的i值不是必須的,但是添加i值有以下好處:

現(xiàn)在python3提供了key-function,所以DSU方法已經(jīng)不常用了

python2.x版本中,是利用cmp參數(shù)自定義排序。

python3.x已經(jīng)將這個(gè)方法移除了,但是我們還是有必要了解一下cmp參數(shù)

cmp參數(shù)的使用方法就是指定一個(gè)函數(shù),自定義排序的規(guī)則,和java等其他語言很類似

也可以反序排列

python3.x中可以用如下方式:

文章題目:python成績排序函數(shù) Python的排序函數(shù)
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article20/hehgco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、全網(wǎng)營銷推廣、網(wǎng)站排名、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
淄博市| 三门县| 松江区| 轮台县| 新建县| 思茅市| 澎湖县| 旬邑县| 察雅县| 尉氏县| 兴海县| 苏尼特左旗| 富顺县| 湖口县| 梁山县| 昭觉县| 凯里市| 仙居县| 张掖市| 舒兰市| 海伦市| 南漳县| 建宁县| 浠水县| 山东省| 连云港市| 大荔县| 黑龙江省| 民权县| 资溪县| 福安市| 龙江县| 崇阳县| 平利县| 漯河市| 台南县| 富阳市| 齐河县| 镇康县| 永登县| 武隆县|