版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第17章Python數(shù)據(jù)分析主講夏敏捷計算機學(xué)院副教授PythonDataAnalysisLibrary(Pandas)PythonDataAnalysisLibrary(Pandas)是基于NumPy的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas提供了一些標(biāo)準(zhǔn)的數(shù)據(jù)模型和大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法,使Python成為大型數(shù)據(jù)集強大而高效的數(shù)據(jù)分析工具。本章就來學(xué)習(xí)Pandas操作方法。Pandas提供如下數(shù)據(jù)類型:(1)Series系列(Series)是能夠保存任何類型的數(shù)據(jù)(整數(shù),字符串,浮點數(shù),Python對象等)的一維標(biāo)記數(shù)組。
(2)DataFrame數(shù)據(jù)框(DataFrame)是二維的表格型數(shù)據(jù)結(jié)構(gòu)。很多功能與R中的data.frame類似。可以將DataFrame理解為Series的容器。(3)Panel面板(Panel)是三維的數(shù)組,可以理解為DataFrame的容器。17.1PythonDataAnalysisLibrary(Pandas)2.使用Pandas首先需要安裝,在命令行下使用pip3installpandas即可。Pandas約定俗成的導(dǎo)入方法如下:importpandasaspdfrompandasimportSeries,DataFrame如果能導(dǎo)入成功,說明安裝成功。17.1PythonDataAnalysisLibrary
(Pandas)17.1.1Series系列1.創(chuàng)建Pandas系列Series就如同列表一樣是一系列數(shù)據(jù),每個數(shù)據(jù)對應(yīng)一個索引值。可以看做一個定長的有序字典。s=Series(['中國','美國','日本']) #注意這里是默認(rèn)索引0,1,2s=Series(['中國','美國','日本'],index=['a','b','c'])
#自定義索引s=Series(data=['中國','美國','日本'],index=['a','b','c'])Pandas系列可以使用以下構(gòu)造函數(shù)創(chuàng)建:pandas.Series(data,index,dtype,copy)17.1.1Series系列2.訪問Pandas系列(1)使用位置訪問Pandas系列中數(shù)據(jù)s=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])print(s[0])#訪問第一個元素1print(s[:3])#檢索系列中的前三個元素1,2,3print(s[-3:])#檢索系列中的最后三個元素3,4,5(2)使用索引訪問Pandas系列中數(shù)據(jù)系列Series就像一個固定大小的字典,可以通過索引標(biāo)簽獲取和設(shè)置值。s=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])print(s['b'])#結(jié)果是2print(s[['a','c','d']])#獲取索引a,c,d對應(yīng)值17.1.2DataFrame數(shù)據(jù)框(DataFrame)是二維數(shù)據(jù)結(jié)構(gòu),即數(shù)據(jù)以行和列的表格方式排列。基本上可以把DataFrame看成是共享同一個index索引的Series的集合。構(gòu)造函數(shù)創(chuàng)建pandas.DataFrame(data,index,columns,dtype,copy)17.1.2DataFrame1.從單個列表創(chuàng)建DataFrameimportpandasaspddata=[10,20,30,40,50]df=pd.DataFrame(data)print(df)2.從多維列表創(chuàng)建DataFrameimportpandasaspddata=[['Alex',10],['Bob',12],['Clarke',13]]df=pd.DataFrame(data,columns=['Name','Age'])print(df)17.1.2DataFrame(3)從鍵值為ndarrays/Lists的字典來創(chuàng)建importpandasaspddata={'Name':['Tom','Jack','Steve','Ricky'],'Age':[28,34,29,42]}df=pd.DataFrame(data)print(df)(4)從系列Series的字典來創(chuàng)建importpandasaspdd={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}df=pd.DataFrame(d)print(df)DataFrame的基本功能DataFrame的基本功能>>>importpandasaspd>>>df=pd.read_csv("marks2.csv")#marks2.csv是成績信息>>>
df.T#DataFrame的轉(zhuǎn)置。實現(xiàn)行和列將交換DataFrame的基本功能head()和tail()要查看DataFrame對象的部分?jǐn)?shù)據(jù),可使用head()和tail()方法。head()返回前n行(默認(rèn)數(shù)量為5)。tail()返回最后n行(默認(rèn)數(shù)量為5)。但可以傳遞自定義的行數(shù)。DataFrame的行列操作(1)選擇列通過列名從數(shù)據(jù)框(DataFrame)中選擇一列importpandasaspdd={'one':pd.Series([11,12,13],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}df=pd.DataFrame(d)print(df['one'])#選擇'one'列DataFrame的行列操作(2)添加列importpandasaspdd={'one':pd.Series([11,12,13],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}df=pd.DataFrame(d)print("AddinganewcolumnbypassingasSeries:")df['three']=pd.Series([10,20,30],index=['a','b','c'])print("AddinganewcolumnusingtheexistingcolumnsinDataFrame:")df['four']=df['one']+df['three']DataFrame的行列操作(3)刪除列importpandasaspdd={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d']),'three':pd.Series([10,20,30],index=['a','b','c'])}df=pd.DataFrame(d)#使用DEL刪除功能deldf['one']#刪除one列#使用POP刪除功能df.pop('two')#刪除two列print(df)DataFrame的行列操作(4)行選擇,添加和刪除可以通過將行標(biāo)簽傳遞給loc()函數(shù)來選擇行。importpandasaspdd={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}df=pd.DataFrame(d)print(df.loc['b'])也可以通過將行號傳遞給iloc()函數(shù)來選擇行。print(df.iloc[2])#注意行號是零開始,所以實際是第3行也可以進(jìn)行行切片,使用:運算符選擇多行。print(df[2:4])#選擇第3行到第4行DataFrame的行列操作(5)添加行#使用append()函數(shù)將新行添加到DataFrame中。
importpandasaspd
df=pd.DataFrame([[1,2],[3,4]],columns=['a','b'])
df2=pd.DataFrame([[5,6],[7,8]],columns=['a','b'])
df=df.append(df2)
print(df)DataFrame的行列操作(6)刪除行使用索引標(biāo)簽從DataFrame中刪除或刪除行。如果標(biāo)簽重復(fù),則會刪除多行。importpandasaspddf=pd.DataFrame([[1,2],[3,4]],columns=['a','b'])df2=pd.DataFrame([[5,6],[7,8]],columns=['a','b'])df=df.append(df2)print(df)print('Droprowswithlabel0')df=df.drop(0)print(df)17.2Pandas統(tǒng)計功能DataFrame有很多函數(shù)用來計算描述性統(tǒng)計信息和其他相關(guān)操作。1.描述性統(tǒng)計描述性統(tǒng)計又叫統(tǒng)計分析,一般統(tǒng)計某個變量的平均值、標(biāo)準(zhǔn)偏差、最小值、最大值、以及1/4中位數(shù),1/2中位數(shù),3/4中位數(shù)。表17-4列出Pandas中主要的描述性統(tǒng)計信息的函數(shù)。17.2Pandas統(tǒng)計功能2.匯總DataFrame列數(shù)據(jù)describe()函數(shù)是用來計算有關(guān)DataFrame列的統(tǒng)計信息的摘要。包括數(shù)量count,平均值mean,標(biāo)準(zhǔn)偏差std,最小值min,最大值max,以及1/4中位數(shù),1/2中位數(shù),3/4中位數(shù)。17.2.2分組統(tǒng)計Pandas有多種方式來分組(GroupBy),如:obj.groupby(‘key’)obj.groupby([‘key1’,’key2’])obj.groupby(key,axis=1)例如:importpandasaspddf=pd.DataFrame([[199901,'張海','男',100,100,25,72],[199902,'趙大強','男',95,54,44,88],[199903,'李梅','女',54,76,13,91],[199904,'吉建軍','男',89,78,26,100]],columns=['xuehao','name','sex','physics','python','math','english'])grouped=df.groupby('sex')#按性別分組print(grouped.get_group('男'))17.3Pandas合并/連接和排序Pandas具有功能全面的高性能內(nèi)存中連接操作,與SQL關(guān)系數(shù)據(jù)庫非常相似。Pandas提供了一個merge()函數(shù),實現(xiàn)DataFrame對象之間所有標(biāo)準(zhǔn)數(shù)據(jù)庫連接操作。merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True)合并/連接importpandasaspd
left=pd.DataFrame({
'id':[1,2,3,4,5],
'Name':['Alex','Amy','Allen','Alice','Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right=pd.DataFrame(
{'id':[1,2,3,4,5],
'Name':['Billy','Brian','Bran','Bryce','Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
#'id'列用作鍵合并兩個數(shù)據(jù)框。
print("'id'列用作鍵合并兩個數(shù)據(jù)框")
rs=pd.merge(left,right,on='id')
print(rs)
合并/連接rs=pd.merge(left,right,on='subject_id',how='left')print(rs)
合并/連接rs=pd.merge(left,right,on='subject_id',how=‘inner')print(rs)
rs=pd.merge(left,right,on='subject_id',how='outer')print(rs)17.3.2排序和排名根據(jù)條件對Series對象或DataFrame對象的值排序(sorting)和排名(ranking)是Pandas一種重要的內(nèi)置運算。Series對象或DataFrame對象可以使用sort_index()/sort_values()函數(shù)進(jìn)行排序,使用rank()函數(shù)進(jìn)行排名。Series的排序Series的sort_index()排序函數(shù),對Series的索引進(jìn)行排序,默認(rèn)是升序importpandasaspds=pd.Series([10,20,33],index=["a","c","b"])#定義一個Seriesprint(s.sort_index())#對Series的索引進(jìn)行排序,默認(rèn)是升序print(s.sort_index(ascending=False))#ascending=False是降序排序?qū)eries不僅可以按索引(標(biāo)簽)進(jìn)行排序,還可以使用sort_values()函數(shù)按值排序。print(s.sort_values(ascending=False))#ascending=False是降序排序DataFrame的排序DataFrame的sort_index()排序函數(shù)使用sort_index()方法,可以對DataFrame進(jìn)行排序。默認(rèn)情況下,按照升序?qū)π兴饕?biāo)簽)進(jìn)行排序。importpandasaspddf=pd.DataFrame([[199901,'張海','男',100,100,25,72],[199902,'趙大強','男',95,54,44,88],[199903,'李梅','女',54,76,13,91],[199904,'吉建軍','男',89,78,26,100]],columns=['xuehao','name','sex','physics','python','math','english'],
index=[1,4,6,2])如果希望按某列的值排序,例如'english'的成績排序可使用by參數(shù)。sorted_df=df.sort_index(by='english')#按列的值排序(不提倡)sorted_df2=df.sort_values(by='english')#按列的值排序print(sorted_df2)排名(ranking)rank(method="average",ascending=True)method參數(shù)值first按值在原始數(shù)據(jù)中的出現(xiàn)順序分配排名,還有min使用整個分組的最小排名,max是用整個分組的最大排名,average使用平均排名,也是默認(rèn)的排名方式。還可以設(shè)置ascending參數(shù),設(shè)置降序還是升序排序。importpandasaspds=pd.Series([1,3,2,1,6],index=["a","c","d","b","e"])print(s.rank())#默認(rèn)是根據(jù)值的大小進(jìn)行平均排名print(s.rank(method="first"))17.4Pandas篩選和過濾功能Pandas的邏輯篩選功能比較簡單,直接在方括號里輸入邏輯運算符即可。假設(shè)數(shù)據(jù)框如下:importpandasaspddf=pd.DataFrame([[199901,'張海','男',100,100,95,72],[199902,'趙大強','男',95,54,44,88],[199903,'李梅','女',54,76,13,91],[199904,'吉建軍','男',89,78,26,100]],columns=['xuehao','name','sex','physics','python','math','english'],index=[1,4,6,2])df1=df[(df.math>80)&(df.english>90)]loc可以使用邏輯運算符設(shè)置具體的篩選條件。df2=df.loc[df['math']>80]#表示選取math列大于80的行print(df2)按篩選條件進(jìn)行匯總很多時候我們還需要對篩選后的結(jié)果進(jìn)行匯總,例如求和,計數(shù),或計算均值等等。也就是Excel中常用的sumifs和countifs函數(shù)。importpandasaspddf=pd.DataFrame([[199901,'張海','男',100,100,95,72],[199902,'趙大強','男',95,54,44,88],[199903,'李梅','女',54,76,13,91],[199904,'吉建軍','男',89,78,26,100]],columns=['xuehao','name','sex','physics','python','math','english'],index=[1,4,6,2])df1=df[(df.english>80)]print(df1['english'].count())print(df1['english'].mean())#計算>80的英語平均分按篩選條件進(jìn)行匯總importpandasaspd
df=pd.DataFrame([[199901,'張海','男',100,100,95,72],
[199902,'趙大強','男',95,54,44,88],
[199903,'李梅','女',54,76,13,91],
[199904,'吉建軍','男',89,78,26,100]],
columns=['xuehao','name','sex','physics','python','math','english'],
index=[1,4,6,2])
s2=df.loc[df['math']<80].math.sum()#表示選取math列小于80的行求math總和
print(s2)
s2=df.loc[df['math']<80].math.mean()#表示選取math列小于80的行求math平均分
print(s2)過濾過濾根據(jù)定義的條件過濾數(shù)據(jù),并返回滿足條件的數(shù)據(jù)集。filter()函數(shù)用于過濾數(shù)據(jù)。filter()函數(shù)格式如下:Series.filter(items=None,like=None,regex=None,axis=None)DataFrame.filter(items=None,like=None,regex=None,axis=None)例如:df1=df.filter(items=['sex','math','english'])#篩選需要的列print(df1)也可以使用regex正則表達(dá)式參數(shù)。例如獲取列名h結(jié)尾的數(shù)據(jù)。df2=df.filter(regex='h$',axis=1)like參數(shù)意味“包含”。例如獲取行索引包含2的數(shù)據(jù)。df3=df.filter(like='2',axis=0)17.5Pandas數(shù)據(jù)導(dǎo)入導(dǎo)出1.導(dǎo)入CSV文件importpandasaspddf=pd.read_csv("marks.csv")還有另外一種方法:df=pd.read_table("marks.csv",sep=",")17.5.2讀取其它格式數(shù)據(jù)1.導(dǎo)入Excel文件pd.read_excel(filename)從Excel文件導(dǎo)入數(shù)據(jù)。例如:xls=pd.read_excel("marks.xlsx")sheet1=xls.parse("Sheet1")sheet1就是一個DataFrame對象。17.5.2讀取其它格式數(shù)據(jù)2.導(dǎo)入JSON格式文件Pandas提供的read_json()函數(shù),可以用來創(chuàng)建Series或者pandasDataFrame數(shù)據(jù)結(jié)構(gòu)。(1)利用JSON字符串imp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中八年級英語 Unit 4 Section B 聽說課深度教案(城市生活議題探究)
- 飛天的物理詩學(xué):跨學(xué)科實踐創(chuàng)作科幻故事(初中物理八年級全一冊)
- 小學(xué)五年級數(shù)學(xué)下冊期末總復(fù)習(xí)(青島版五四制)教案
- 幼兒園中班保育工作規(guī)范化管理與實操教學(xué)設(shè)計
- 小學(xué)六年級英語(PEP)Unit 1 How can I get there 復(fù)習(xí)導(dǎo)學(xué)案
- 小學(xué)五年級數(shù)學(xué)上冊《不規(guī)則圖形面積的估算》教學(xué)設(shè)計
- 高中二年級化學(xué):污水凈化材料的應(yīng)用與創(chuàng)新教學(xué)設(shè)計
- 中職商貿(mào)專業(yè)《汽車服務(wù)合同核心條款解析與實務(wù)》教案
- 初中英語九年級全一冊Unit8素養(yǎng)進(jìn)階閱讀:基于邏輯推演的跨學(xué)科解謎導(dǎo)學(xué)案
- 數(shù)學(xué)人教版7.2.2用坐標(biāo)表示平移教案
- 會展策劃書案例
- 實驗室EHS安全培訓(xùn)內(nèi)容課件
- 2025ACP臨床指南:門診預(yù)防發(fā)作性偏頭痛的藥物治療解讀課件
- 2025年“機器人+人工智能”工業(yè)應(yīng)用研究報告
- 四川省綿陽市東辰學(xué)校2025-2026學(xué)年高一上學(xué)期第一次月考數(shù)學(xué)試題(含解析)
- 2025內(nèi)蒙古巴彥淖爾市磴口縣第三批社區(qū)工作者招聘60人筆試考試備考試題及答案解析
- 滅菌鍋安全操作培訓(xùn)課件
- 非煤礦山機電安全培訓(xùn)
- 砌筑班組安全培訓(xùn)內(nèi)容課件
- 直播勞動合同(標(biāo)準(zhǔn)版)
- 晶胞中微粒數(shù)目及晶體化學(xué)式的確定(含解析)-2026屆高中化學(xué)一輪復(fù)習(xí)講義
評論
0/150
提交評論