第4章 Pandas-高性能的數(shù)據(jù)結構和數(shù)據(jù)分析工具_第1頁
第4章 Pandas-高性能的數(shù)據(jù)結構和數(shù)據(jù)分析工具_第2頁
第4章 Pandas-高性能的數(shù)據(jù)結構和數(shù)據(jù)分析工具_第3頁
第4章 Pandas-高性能的數(shù)據(jù)結構和數(shù)據(jù)分析工具_第4頁
第4章 Pandas-高性能的數(shù)據(jù)結構和數(shù)據(jù)分析工具_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第4章Pandas--高性能的數(shù)據(jù)結構和數(shù)據(jù)分析工具初識PandasPandas數(shù)據(jù)結構的基本操作Pandas的計算與統(tǒng)計Pandas其他常用方法實戰(zhàn):泰坦尼克號乘客數(shù)據(jù)處理與分析掌握Pandas模塊的基本數(shù)據(jù)結構。掌握DataFrame函數(shù)和Series函數(shù)的相關操作。掌握Pandas的常用數(shù)據(jù)處理與統(tǒng)計方法。掌握Pandas的IO操作。4.1初識Pandas4.1初識PandasPandas是Python數(shù)據(jù)分析的核心支持庫,提供了快速、靈活、明確的數(shù)據(jù)結構,旨在簡單、直觀地處理關系型、標記型數(shù)據(jù)。Pandas的目標是成為Python數(shù)據(jù)分析實踐與實戰(zhàn)的必備高級工具,其長遠目標是成為最強大、最靈活、可以支持任何語言的開源數(shù)據(jù)分析工具。4.2Pandas數(shù)據(jù)結構的基本操作Series對象的創(chuàng)建Series對象的屬性DataFrame對象的創(chuàng)建DataFrame對象的基本操作4.2Pandas數(shù)據(jù)結構的基本操作Pandas常用的有兩種數(shù)據(jù)結構——Series與DataFrame。Series是一種類似于一維數(shù)組的對象,它由一組數(shù)據(jù)(即各種NumPy數(shù)據(jù)類型)以及一組與之相關的數(shù)據(jù)標簽(即索引)組成。DataFrame是一個表格型的數(shù)據(jù)結構,它含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾型值等)。DataFrame既有行索引也有列索引,它可以被看作由Series組成的字典(共同用一個索引)。4.2Pandas數(shù)據(jù)結構的基本操作4.2.1Series對象的創(chuàng)建PandasSeries類似于NumPy中的一維數(shù)組,可以保存任何數(shù)據(jù)類型。同NumPy一樣,Pandas也提供了創(chuàng)建對應數(shù)據(jù)類型的基本類,Series類創(chuàng)建類就形式如下。pandas.Series(data=None,index=None,dtype=None,name=None,copy=False, fastpath=False)參數(shù)說明data包含存儲在Series中的數(shù)據(jù)。如果data是一個字典,則保持參數(shù)順序index數(shù)據(jù)索引標簽,如果不指定,默認從0開始dtype輸出Series的數(shù)據(jù)類型。如果未指定,這將從data推斷name賦予Series的名稱copy復制輸入數(shù)據(jù)。僅影響Series或1dNdarray輸入4.2Pandas數(shù)據(jù)結構的基本操作4.2.1Series對象的創(chuàng)建直接通過Series類創(chuàng)建數(shù)據(jù)類型frompandasimportSeries#導入Series類importpandasaspd#導入pandas模塊ser=Series([1,2,3,4,5])#以列表類型創(chuàng)建Series數(shù)據(jù)ser0112233445dtype:int644.2Pandas數(shù)據(jù)結構的基本操作4.2.1Series對象的創(chuàng)建以字典類型創(chuàng)建Series數(shù)據(jù)ser=Series({'a':1,'b':2,'c':3,'d':4,'e':5})sera1b2c3d4e5dtype:int644.2Pandas數(shù)據(jù)結構的基本操作4.2.1Series對象的創(chuàng)建需要添加指定索引時,可以使用Series類中的index參數(shù)去指定數(shù)據(jù)的索引。ser=Series([1,2,3,4,5],index=[2,3,4,5,6])ser2132435465dtype:int644.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性Series對象常用屬性包含兩大類:索引與數(shù)值。Series具體屬性與方法說明如表所示。屬性說明values包含存儲在Series中的數(shù)據(jù)。如果value是一個字典,則保持參數(shù)順序。index數(shù)據(jù)索引標簽,如果不指定,默認從0開始。dtype輸出Series的數(shù)據(jù)類型。如果未指定,這將從data推斷。name賦予Series的名稱。索引的name使用values可以查看Series對象ser的數(shù)據(jù)值;使用index可以查看ser的索引值。print(ser.values)#查看數(shù)組數(shù)據(jù)值print(ser.index)

#查看數(shù)組索引值[12345]Int64Index([2,3,4,5,6],dtype='int64')4.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性查看指定索引值print(ser)print(ser[3])#查看索引值為3的數(shù)據(jù)值print(ser[4])#查看索引值為4的數(shù)據(jù)值0112233445dtype:int64454.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性查看元素數(shù)據(jù)類型、查看數(shù)組形狀以及查看該對象占用了多少字節(jié)print(ser.dtype)#元素的數(shù)據(jù)類型print(ser.shape)#形狀print(ser.nbytes)#series對象占用多少字節(jié)int64(5,)404.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性Pandas.series對象也可以進行series對象與常數(shù)、series對象與series對象之間的基本運算,也可以進行簡單的成分判斷與篩選。ser=Series([1,2,3,4,5])#創(chuàng)建series對象ser_2=Series([1,2,3,4,5])#創(chuàng)建series對象print(ser+1)#series與常數(shù)進行加法運算print("*"*10)print(ser-1)#series與常數(shù)進行減法運算print("*"*10)0213243546dtype:int64**********0011223344dtype:int64**********4.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性print(ser*2)#series與常數(shù)進行乘法運算print("*"*10)print(ser/2)#series與常數(shù)進行除法運算print("*"*10)02142638410dtype:int64**********00.511.021.532.042.5dtype:float64**********4.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性print(ser+ser_2)#series與series進行加法運算print("*"*10)print(ser+ser_2)#series與series進行減法運算print("*"*10)02142638410dtype:int64**********02142638410dtype:int64**********4.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性print(ser*ser_2)#series與series進行乘法運算print("*"*10)print(ser/ser_2)#series與series進行除法運算print("*"*10)011429316425dtype:int64**********01.011.021.031.041.0dtype:float64**********4.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性print(3inser)#判斷3是否在series對象元素中print("*"*10)print(ser[ser>3])#找出series對象中大于三的元素True**********3445dtype:int644.2Pandas數(shù)據(jù)結構的基本操作4.2.2Series對象的屬性4.2Pandas數(shù)據(jù)結構的基本操作4.2.3DataFrame對象的創(chuàng)建Pandas中另一個重要的數(shù)據(jù)類型為DataFrame,DataFrame對象的創(chuàng)建方法如下。pandas.DataFrame(data,index,columns,dtype,copy)參數(shù)說明data數(shù)據(jù)本身(Ndarray、series,map,lists,dict等類型)Index索引值columns列標簽,默認為RangeIndex(0,1,2,…,n)dtype數(shù)據(jù)類型copy拷貝數(shù)據(jù),默認為False。frompandasimportDataFrameimportpandasaspd#創(chuàng)建初始字典數(shù)據(jù)dic={"姓名":['小千','小鋒','小亮','小可'],'性別':['男','男','男','女'],'數(shù)學成績':[89,90,98,94],'語文成績':[81,87,93,95]}dic{'姓名':['小千','小鋒','小亮','小可'],'性別':['男','男','男','女'],'數(shù)學成績':[89,90,98,94],'語文成績':[81,87,93,95]}4.2Pandas數(shù)據(jù)結構的基本操作4.2.3DataFrame對象的創(chuàng)建要創(chuàng)建一個DataFrame對象,首先需要建立原始數(shù)據(jù),通常原始數(shù)據(jù)類型以字典的形式創(chuàng)建。df=DataFrame(dic)#使用默認方式創(chuàng)建DataFrame類型數(shù)據(jù)df姓名 性別 數(shù)學成績 語文成績0 小千 男 89 811 小鋒 男 90 872 小亮 男 98 933 小可 女 94 954.2Pandas數(shù)據(jù)結構的基本操作4.2.3DataFrame對象的創(chuàng)建通常一組字典數(shù)據(jù)可以直接用來創(chuàng)建DataFrame數(shù)據(jù)類型df=DataFrame(dic,columns=['性別','姓名','語文成績','數(shù)學成績'])#使用指定列名方式創(chuàng)建DataFrame類型數(shù)據(jù)df性別 姓名 語文成績 數(shù)學成績0 男 小千 81 891 男 小鋒 87 902 男 小亮 93 983 女 小可 95 944.2Pandas數(shù)據(jù)結構的基本操作4.2.3DataFrame對象的創(chuàng)建當需要改變DataFrame數(shù)據(jù)中列的順序時,可以通過直接指定其列名來創(chuàng)建DataFrame數(shù)據(jù)。frompandasimportDataFrameimportpandasaspd#創(chuàng)建初始DataFrame對象dic={"姓名":['小千','小鋒','小亮','小可'],'性別':['男','男','男','女'],'數(shù)學成績':[89,90,98,94],'語文成績':[81,87,93,95]}df=DataFrame(dic)print(df)print('*'*10)print(df['姓名'])#獲取“姓名”列數(shù)據(jù)print('*'*10)print(df.iloc[[2]])#獲取行索引為2數(shù)據(jù)4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作DataFrame行列操作-查看行列數(shù)據(jù)(代碼操作)姓名性別數(shù)學成績語文成績0小千男89811小鋒男90872小亮男98933小可女9495**********4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作DataFrame行列操作-查看行列數(shù)據(jù)(運行結果)0小千1小鋒2小亮3小可Name:姓名,dtype:object**********姓名性別數(shù)學成績語文成績2小亮男9893df['評價']='優(yōu)'#新增“評價”列df4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作Pandas模塊提供了“[]”運算符進行數(shù)據(jù)的直接賦值操作。當進行數(shù)據(jù)清洗操作時,某行或者某列的數(shù)據(jù)需要對其進行修改,可以對其進行直接賦值操作。姓名 性別 數(shù)學成績 語文成績 評價0 小千 男 89 81 優(yōu)1 小鋒 男 90 87 優(yōu)2 小亮 男 98 93 優(yōu)3 小可 女 94 95 優(yōu)df['評價']='良'df4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作進行數(shù)據(jù)修改操作姓名 性別 數(shù)學成績 語文成績 評價0 小千 男 89 81 良1 小鋒 男 90 87 良2 小亮 男 98 93 良3 小可 女 94 95 良df.iloc[[2]]=['小明','女','93','99','優(yōu)']df4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作需要修改整行數(shù)據(jù)時,可以使用iloc()函數(shù)姓名 性別 數(shù)學成績 語文成績 評價0 小千 男 89 81 良1 小鋒 男 90 87 良2 小明 女 93 99 優(yōu)3 小可 女 94 95 良df=df.drop(2,axis=0)df4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作刪除行列數(shù)據(jù),當一組數(shù)據(jù)存在臟數(shù)據(jù)時,在不影響數(shù)據(jù)分析結果的情況下,需要將其刪去。姓名 性別 數(shù)學成績 語文成績 評價0 小千 男 89 81 良1 小鋒 男 90 87 良3 小可 女 94 95 良df=df.drop('評價',axis=1)df4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作恢復為例4-11中的df數(shù)據(jù)數(shù)據(jù),進行列的刪除操作。姓名 性別 數(shù)學成績 語文成績0 小千 男 89 811 小鋒 男 90 872 小明 女 93 993 小可 女 94 95frompandasimportDataFrameimportpandasaspd#創(chuàng)建初始字典數(shù)據(jù)dic={"姓名":['小千','小鋒','小亮','小可'],'性別':['男','男','男','女'],'數(shù)學成績':[89,90,98,94],'語文成績':[81,87,93,95],'評價':['良','良','優(yōu)','良']}df=DataFrame(dic,columns=['姓名','性別','數(shù)學成績','語文成績','評價','平均成績'])df4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作DataFrameNaN值填充操作姓名 性別 數(shù)學成績 語文成績 評價 平均成績0 小千 男 89 81 良 NaN1 小鋒 男 90 87 良 NaN2 小亮 男 98 93 優(yōu) NaN3 小可 女 94 95 良 NaNdf=df.fillna(0)#將DataFrame中的NaN值替換為0df4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作在某些時候可以將NaN值替換為某個值姓名 性別 數(shù)學成績 語文成績 評價 平均成績0 小千 男 89 81 良 01 小鋒 男 90 87 良 02 小亮 男 98 93 優(yōu) 03 小可 女 94 95 良 0df.T4.2Pandas數(shù)據(jù)結構的基本操作4.2.4DataFrame對象的基本操作DataFrame的轉置-訪問T屬性0 1 2 3姓名 小千 小鋒 小亮 小可性別 男 男 男 女數(shù)學成績 89 90 98 94語文成績 81 87 93 95評價 良 良 優(yōu) 良平均成績 -99 -99 -99 -994.3Pandas的計算與統(tǒng)計DataFrame對象的基本計算DataFrame對象與Series對象之間的基本計算Pandas中常用的統(tǒng)計方法4.3Pandas的計算與統(tǒng)計4.3.1DataFrame對象的基本計算創(chuàng)建DataFrame對象frompandasimportDataFrameimportpandasaspdlist1=[[1,2,3,4,5],[6,7,8,9,0],[2,4,6,8,0],[1,3,5,7,9]]#創(chuàng)建原始列表數(shù)據(jù)#使用原始數(shù)據(jù)創(chuàng)建兩個DataFrame對象df_1=DataFrame(list1,columns=['A','B','C','D','E'])df_2=DataFrame(list1,columns=['A','B','C','D','E'])print(df_1)print(df_2)ABCDE012345167890224680313579ABCDE0123451678902246803135794.3Pandas的計算與統(tǒng)計4.3.1DataFrame對象的基本計算對創(chuàng)建完成的兩組DataFrame數(shù)據(jù)進行基本運算print(df_1+df_2)#相加print('*'*10)print(df_1-df_2)#相減print('*'*10)print(df_1*df_2)#相乘print('*'*10)print(df_1/df_2)#相除ABCDE0246810112141618024812160326101418**********ABCDE000000100000200000300000**********ABCDE014916251364964810241636640319254981**********ABCDE01.01.01.01.01.011.01.01.01.0NaN21.01.01.01.0NaN31.01.01.01.01.04.3Pandas的計算與統(tǒng)計4.3.2DataFrame對象與Series對象之間的基本計算創(chuàng)建DataFrame對象與Series對象frompandasimportDataFrame,Seriesimportpandasaspdlist1=[[1,2,3,4,5],[6,7,8,9,0],[2,4,6,8,0],[1,3,5,7,9]]#創(chuàng)建原始列表數(shù)據(jù)#創(chuàng)建DataFrame對象df_1=DataFrame(list1,columns=['A','B','C','D','E'])print(df_1)print('*'*10)#創(chuàng)建Series對象ser_1=Series([1,2,3,4,5],index=['A','B','C','D','E'])print(ser_1)ABCDE012345167890224680313579**********A1B2C3D4E5dtype:int644.3Pandas的計算與統(tǒng)計對DataFrame對象與Series對象進行基本的四則運算print(df_1+ser_1)#相加print("*"*10)print(df_1-ser_1)#相減print("*"*10)print(df_1*ser_1)#相乘print("*"*10)print(df_1/ser_1)#相除ABCDE024681017911135236912532581114**********ABCDE00000015555-521234-5301234**********ABCDE0149162516142436022818320316152845**********ABCDE01.01.01.0000001.001.016.03.52.6666672.250.022.02.02.0000002.000.031.01.51.6666671.751.84.3.2DataFrame對象與Series對象之間的基本計算4.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法模擬創(chuàng)建一組含有空值的DataFrame對象frompandasimportDataFrameimportpandasaspd#創(chuàng)建初始字典數(shù)據(jù)dic={"姓名":['小千','小鋒','小亮','小可'],'性別':['男','男','男','女'],'數(shù)學成績':[89,90,98,94],'語文成績':[81,87,93,95],'評價':['良','良','優(yōu)','良']}df=DataFrame(dic,columns=['姓名','性別','數(shù)學成績','語文成績','評價','平均成績'])df姓名 性別 數(shù)學成績 語文成績 評價 平均成績0 小千 男 89 81 良 NaN1 小鋒 男 90 87 良 NaN2 小亮 男 98 93 優(yōu) NaN3 小可 女 94 95 良 NaN4.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法行列值總和df.sum(axis=1)#求行總和print('\n')print(df.sum())#求列總和0170117721913189dtype:int64姓名小千小鋒小亮小可性別男男男女數(shù)學成績371語文成績356評價良良優(yōu)良平均成績0dtype:object注意:在求行數(shù)據(jù)總和時會出現(xiàn)FutureWarning警告錯誤,這表示該行存在無法求和的數(shù)值,在此數(shù)據(jù)中存在人名、性別等中文字符,此時執(zhí)行行求和函數(shù)會默認將可進行求和的數(shù)值進行相加,即數(shù)學成績和語文成績。4.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法行列值平均數(shù)df.mean(axis=1)085.0188.5295.5394.5dtype:float644.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法運行結果賦值給“平均成績”這一列df['平均成績']=df.mean(axis=1)df姓名 性別 數(shù)學成績 語文成績 評價 平均成績0 小千 男 89 81 良 85.01 小鋒 男 90 87 良 88.52 小亮 男 98 93 優(yōu) 95.53 小可 女 94 95 良 94.54.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法分別求“數(shù)學成績”列和“語文成績”列數(shù)據(jù)的平均值df.mean()數(shù)學成績92.750語文成績89.000平均成績90.875dtype:float644.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法最大值與最小值print(df['數(shù)學成績'].min())#數(shù)學成績最小值print(df['數(shù)學成績'].max())#數(shù)學成績最大值8998當要求某行的最小值與最大值時,只需要在函數(shù)參數(shù)中加上axis=1即可。4.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法多種匯總統(tǒng)計print(df['數(shù)學成績'].describe())count4.000000mean92.750000std4.112988min89.00000025%89.75000050%92.00000075%95.000000max98.000000Name:數(shù)學成績,dtype:float644.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法數(shù)據(jù)分組統(tǒng)計,Pandas提供了groupby()函數(shù)來方便進行分組,在分組結果上可以應用sum()、mean()、count()等統(tǒng)計方法DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=NoDefault.no_default,observed=False,dropna=True)參數(shù)說明By用于確定groupby的組。axis沿行(0)或列(1)拆分。level如果軸是MultiIndex(層次化),則按一個或多個特定級別進行分組。sort對組鍵進行排序。group_keys當調用apply時,將組鍵添加到index以識別片段。dropna如果為

True,并且組鍵包含NA值,則NA值連同行/列將被刪除。如果為False,NA值也將被視為組中的鍵。dtype接受字典類型數(shù)據(jù),代表寫入的數(shù)據(jù)類型,默認為None4.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法groupby()函數(shù)具體使用方法df.groupby('性別')<pandas.core.groupby.generic.DataFrameGroupByobjectat0x00000188E3639D90>當由運行結果可見,當對數(shù)據(jù)中的“性別”列進行groupby()操作時,結果返回的結果是其內存地址,并不利于直觀地理解,為了看看group內部究竟是什么,這里把group轉換成list的形式來看一看。4.3Pandas的計算與統(tǒng)計4.3.3Pandas中常用的統(tǒng)計方法把group轉換成list的形式list(df.groupby('性別'))[('女',姓名性別數(shù)學成績語文成績評價平均成績總成績3小可女9495良NaN189),('男',姓名性別數(shù)學成績語文成績評價平均成績總成績0小千男8981良NaN1701小鋒男9087良NaN1772小亮男9893優(yōu)NaN191)]由運行結果可知,列表由兩個元組組成,由“性別”分為兩個元組,每個元組中,第一個元素為性別,之后的元素為DataFrame數(shù)據(jù)。4.4Pandas其他常用方法Pandas數(shù)據(jù)重復值處理Pandas數(shù)據(jù)排序Pandas數(shù)據(jù)合并Pandas日期數(shù)據(jù)處理4.4Pandas其他常用方法4.4.1Pandas數(shù)據(jù)重復值處理創(chuàng)建一組具有重復值的模擬數(shù)據(jù)frompandasimportDataFrameimportpandasaspd#創(chuàng)建初始字典數(shù)據(jù)dic={"姓名":['小千','小鋒','小鋒','小可'],'性別':['男','男','男','女'],'數(shù)學成績':[89,90,90,94],'語文成績':[81,87,87,95],'評價':['良','良','良','良']}df=DataFrame(dic,columns=['姓名','性別','數(shù)學成績','語文成績','評價'])df姓名 性別 數(shù)學成績 語文成績 評價0 小千 男 89 81 良1 小鋒 男 90 87 良2 小鋒 男 90 87 良3 小可 女 94 95 良4.4Pandas其他常用方法4.4.1Pandas數(shù)據(jù)重復值處理判斷該組數(shù)據(jù)每一行是否重復df.duplicated()0False1False2True3Falsedtype:bool4.4Pandas其他常用方法4.4.1Pandas數(shù)據(jù)重復值處理使用drop_duplicates()函數(shù)進行刪除操作df.drop_duplicates()姓名 性別 數(shù)學成績 語文成績 評價0 小千 男 89 81 良1 小鋒 男 90 87 良3 小可 女 94 95 良4.4Pandas其他常用方法4.4.2Pandas數(shù)據(jù)排序DataFrame數(shù)據(jù)排序時主要使用sort_values()函數(shù)DataFrame.sort_values(by=‘##’,axis=0,ascending=True,inplace=False,na_position=‘last’)參數(shù)說明by指定列名(axis=0或“index”)或索引值(axis=1或“columns”)axis若axis=0或“index”,則按照指定列中數(shù)據(jù)大小排序;若axis=1或“columns”,則按照指定索引中數(shù)據(jù)大小排序,默認axis=0ascending是否按指定列的數(shù)組升序排列,默認為True,即升序排列inplace是否用排序后的數(shù)據(jù)集替換原來的數(shù)據(jù),默認為False,即不替換na_position{“first”,“l(fā)ast”},設定缺失值的顯示位置4.4Pandas其他常用方法創(chuàng)建一組模擬數(shù)據(jù)frompandasimportDataFrameimportpandasaspd#創(chuàng)建初始字典數(shù)據(jù)dic={"姓名":['小千','小鋒','小亮','小可','小麗'],'性別':['男','男','男','女','女'],'數(shù)學成績':[89,87,90,94,92],'語文成績':[81,87,87,95,98],'評價':['良','良','優(yōu)','優(yōu)','優(yōu)']}df=DataFrame(dic,columns=['姓名','性別','數(shù)學成績','語文成績','評價'])df姓名 性別 數(shù)學成績 語文成績 評價0 小千 男 89 81 良1 小鋒 男 87 87 良2 小亮 男 90 87 優(yōu)3 小可 女 94 95 優(yōu)4 小麗 女 92 98 優(yōu)4.4.2Pandas數(shù)據(jù)排序4.4Pandas其他常用方法按單列數(shù)據(jù)排序-現(xiàn)在需要新增列“總成績”,并依據(jù)總成績對數(shù)據(jù)進行降序排名df['總成績']=df['數(shù)學成績']+df['語文成績']#新增總成績=數(shù)學成績+語文成績df=df.sort_values(by='總成績',ascending=False)#依據(jù)總成績進行降序排列df姓名 性別 數(shù)學成績 語文成績 評價 總成績4 小麗 女 92 98 優(yōu) 1903 小可 女 94 95 優(yōu) 1892 小亮 男 90 87 優(yōu) 1771 小鋒 男 87 87 良 1740 小千 男 89 81 良 1704.4.2Pandas數(shù)據(jù)排序4.4Pandas其他常用方法按多列數(shù)據(jù)排序-針對已經(jīng)創(chuàng)建的模擬數(shù)據(jù)中的“性別”與“總成績”進行排序,來分別求出男生與女生的排名df=df.sort_values(by=['性別','總成績'],ascending=[False,False])df姓名 性別 數(shù)學成績 語文成績 評價 總成績2 小亮 男 90 87 優(yōu) 1771 小鋒 男 87 87 良 1740 小千 男 89 81 良 1704 小麗 女 92 98 優(yōu) 1903 小可 女 94 95 優(yōu) 1894.4.2Pandas數(shù)據(jù)排序4.4Pandas其他常用方法數(shù)據(jù)排名-使用Pandas創(chuàng)建一百條職業(yè)數(shù)據(jù)importpandasaspdimportnumpyasnpdf=pd.DataFrame()size=100df["ID"]=np.random.randint(100000,200000,size)df["年齡"]=np.random.randint(0,100,size)df["體重"]=np.random.randint(3,150,size)df["職業(yè)"]=np.random.choice(["醫(yī)生","教師","工程師","職員","高管","自由職業(yè)"],size)df["學歷"]=np.random.choice(["高中","大專","大學","碩士","博士"],size)df["工資"]=np.random.randint(3000,30000,size)print(type(df))dfID 年齡 體重 職業(yè) 學歷 工資0 129203 60 92 高管 大專 131661 172838 25 55 醫(yī)生 大專 279072 140672 72 8 職員 博士 289743 177217 17 113 醫(yī)生 博士 244534 158493 60 63 職員 大專 29847... ... ... ... ... ... ...95 144966 63 47 醫(yī)生 大學 2797596 189470 76 138 教師 大專 985997 116560 83 26 工程師 碩士 1478698 192437 67 141 自由職業(yè) 大學 2234999 194318 1 123 醫(yī)生 碩士 28923100rows×6columns4.4.2Pandas數(shù)據(jù)排序4.4Pandas其他常用方法這些數(shù)據(jù)根據(jù)薪資進行排名,通常使用Pandas.rank()函數(shù)DataFrame.rank(axis=0,method='average',numeric_only=None,na_option='keep',ascending=True,pct=False)4.4.2Pandas數(shù)據(jù)排序參數(shù)說明axis直接排名的索引numeric_only對于DataFrame對象,如果設置為True,則僅對數(shù)字列進行排名na_optionNaN值進行排序pct布爾型,默認為False,是否以百分比形式顯示返回的排名4.4Pandas其他常用方法使用rank()函數(shù)進行順序排名df=df.sort_values(by='工資',ascending=False)#對工資進行各職業(yè)的排名df['順序排名']=df['工資'].rank(method="first",ascending=False)#進行順序排名dfID 年齡 體重 職業(yè) 學歷 工資 順序排名4 158493 60 63 職員 大專 29847 1.032 179742 16 61 高管 大學 29161 2.02 140672 72 8 職員 博士 28974 3.099 194318 1 123 醫(yī)生 碩士 28923 4.065 146724 77 60 自由職業(yè) 大學 28739 5.0... ... ... ... ... ... ... ...33 115528 13 107 教師 碩士 4202 96.087 170857 94 108 醫(yī)生 碩士 4144 97.073 106879 81 142 工程師 高中 4074 98.040 170359 15 79 教師 高中 4046 99.027 113377 12 9 工程師 高中 3082 100.0100rows×7columns4.4.2Pandas數(shù)據(jù)排序4.4Pandas其他常用方法平均排名df['平均排名']=df['工資'].rank(ascending=False)#進行平均排名dfID 年齡 體重 職業(yè) 學歷 工資 順序排名 平均排名4 158493 60 63 職員 大專 29847 1.0 1.032 179742 16 61 高管 大學 29161 2.0 2.02 140672 72 8 職員 博士 28974 3.0 3.099 194318 1 123 醫(yī)生 碩士 28923 4.0 4.065 146724 77 60 自由職業(yè) 大學 28739 5.0 5.0... ... ... ... ... ... ... ... ...33 115528 13 107 教師 碩士 4202 96.0 96.087 170857 94 108 醫(yī)生 碩士 4144 97.0 97.073 106879 81 142 工程師 高中 4074 98.0 98.040 170359 15 79 教師 高中 4046 99.0 99.027 113377 12 9 工程師 高中 3082 100.0 100.04.4.2Pandas數(shù)據(jù)排序4.4Pandas其他常用方法merge()函數(shù)是pandas中最為重要的一個實現(xiàn)數(shù)據(jù)合并的函數(shù)merge(left,right,how=‘inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=(’_x’,‘_y’),copy=True,indicator=False,validate=None)4.4.3Pandas數(shù)據(jù)合并參數(shù)說明left拼接的左側DataFrame對象right拼接的右側DataFrame對象on要加入的列或索引級別名稱。必須在左側和右側DataFrame對象中找到。left_on左側DataFrame中的列或索引級別用作鍵??梢允橇忻饕壝Q,也可以是長度等于DataFrame長度的數(shù)組。right_on左側DataFrame中的列或索引級別用作鍵??梢允橇忻饕壝Q,也可以是長度等于DataFrame長度的數(shù)組。left_index如果為True,則使用左側DataFrame中的索引(行標簽)作為其連接鍵。right_index與left_index功能相似。howOneof‘left’,‘right’,‘outer’,‘inner’.默認inner。inner是取交集,outer取并集。sort按字典順序通過連接鍵對結果DataFrame進行排序。默認為True,設置為False將在很多情況下顯著提高性能。4.4Pandas其他常用方法創(chuàng)建模擬數(shù)據(jù)frompandasimportDataFrameimportpandasaspd#創(chuàng)建初始字典數(shù)據(jù)dic_1={"姓名":['小千','小鋒','小亮','小可','小麗'],'性別':['男','男','男','女','女'],'數(shù)學成績':[89,87,90,94,92],'語文成績':[81,87,87,95,98],'評價':['良','良','優(yōu)','優(yōu)','優(yōu)']}dic_2={"姓名":['小千','小鋒','小亮','小可','小麗'],'體育成績':[95,87,89,91,89]}df_1=DataFrame(dic_1)df_2=DataFrame(dic_2)print(df_1)print("*"*10)print(df_2)姓名性別數(shù)學成績語文成績評價0小千男8981良1小鋒男8787良2小亮男9087優(yōu)3小可女9495優(yōu)4小麗女9298優(yōu)**********姓名體育成績0小千951小鋒872小亮893小可914小麗894.4.3Pandas數(shù)據(jù)合并4.4Pandas其他常用方法常規(guī)合并數(shù)據(jù)df_merge=pd.merge(df_1,df_2,on="姓名")df_merge姓名 性別 數(shù)學成績 語文成績 評價 體育成績0 小千 男 89 81 良 951 小鋒 男 87 87 良 872 小亮 男 90 87 優(yōu) 893 小可 女 94 95 優(yōu) 914 小麗 女 92 98 優(yōu) 894.4.3Pandas數(shù)據(jù)合并4.4Pandas其他常用方法將評價放在最后一列df_merge=df_merge[['姓名','性別','數(shù)學成績','語文成績','體育成績','評價']]df_merge姓名 性別 數(shù)學成績 語文成績 體育成績 評價0 小千 男 89 81 95 良1 小鋒 男 87 87 87 良2 小亮 男 90 87 89 優(yōu)3 小可 女 94 95 91 優(yōu)4 小麗 女 92 98 89 優(yōu)4.4.3Pandas數(shù)據(jù)合并4.4Pandas其他常用方法通過索引列合并數(shù)據(jù)df_merge=pd.merge(df_1,df_2,right_index=True,left_index=True)df_merge姓名_x 性別 數(shù)學成績 語文成績 評價 姓名_y 體育成績0 小千 男 89 81 良 小千 951 小鋒 男 87 87 良 小鋒 872 小亮 男 90 87 優(yōu) 小亮 893 小可 女 94 95 優(yōu) 小可 914 小麗 女 92 98 優(yōu) 小麗 894.4.3Pandas數(shù)據(jù)合并4.4Pandas其他常用方法合并數(shù)據(jù)去重df_merge=pd.merge(df_1,df_2,on='姓名',right_index=True,left_index=True)#方法一df_merge=pd.merge(df_1,df_2,on='姓名',how='left')#方法二df_merge姓名 性別 數(shù)學成績 語文成績 評價 體育成績0 小千 男 89 81 良 951 小鋒 男 87 87 良 872 小亮 男 90 87 優(yōu) 893 小可 女 94 95 優(yōu) 914 小麗 女 92 98 優(yōu) 894.4.3Pandas數(shù)據(jù)合并4.4Pandas其他常用方法Pandas提供了to_datetime()函數(shù)對日期時間做統(tǒng)一的格式化處理pandas.to_datetime(arg,errors='raise',dayfirst=False,yearfirst=False,utc=None,format=None,exact=True,unit=None,infer_datetime_format=False,origin='unix',cache=True)4.4.4Pandas日期數(shù)據(jù)處理參數(shù)說明errors參數(shù)raise時,表示傳入數(shù)據(jù)格式不符合是會報錯;ignore時,表示忽略報錯返回原數(shù)據(jù);coerce用NaT時間空值代替。dayfirst表示傳入數(shù)據(jù)的前兩位數(shù)為天。如“030820”→2020-03-08.yearfirst表示傳入數(shù)據(jù)的前兩位數(shù)為年份。如“030820”→2003-08-20.format自定義輸出格式,如“%Y-%m-%d”.unit可以為[D','h','m','ms','s','ns']infer_datetime_format加速計算origin自定義開始時間,默認為1990-01-014.4Pandas其他常用方法Pandas時間序列基礎以及時間、日期處理importnumpyasnpimportpandasaspddates=['2022-06-20','2022-06-21','2022-06-22','2022-06-23','2022-06-24','2022-06-25','2022-06-26','2022-06-27']ts=pd.Series(np.random.randn(8),index=pd.to_datetime(dates))ts4.4.4Pandas日期數(shù)據(jù)處理2022-06-20-1.4376332022-06-21-0.8765822022-06-22-0.2617042022-06-231.2755792022-06-241.8663312022-06-25-0.2744192022-06-26-1.1175292022-06-270.422183dtype:float644.4Pandas其他常用方法更改日期顯示格式pd.to_datetime('10/11/12',dayfirst=True)pd.to_datetime('12/10/11',dayfirst=True)pd.to_datetime('10/11/12',yearfirst=True)pd.to_datetime('10/11/12')4.4.4Pandas日期數(shù)據(jù)處理Timestamp('2012-11-1000:00:00')Timestamp('2011-10-1200:00:00')Timestamp('2010-11-1200:00:00')Timestamp('2012-10-1100:00:00')4.4Pandas其他常用方法當從DataFrame的多個列中組合一個日期時間。鍵可以是常見的縮寫,例如['year','month','day','minute','second','ms','us','ns'])或相同的復數(shù)形式importpandasaspddf=pd.DataFrame({'year':[2015,2016],'month':[2,3],'day':[4,5]})df4.4.4Pandas日期數(shù)據(jù)處理yearmonthday020152412016354.4Pandas其他常用方法將其轉換為另一種時間顯示形式pd.to_datetime(df)4.4.4Pandas日期數(shù)據(jù)處理02015-02-0412016-03-05dtype:datetime64[ns]4.5實戰(zhàn):泰坦尼克號乘客數(shù)據(jù)處理與分析任務說明任務實現(xiàn)4.5實戰(zhàn):泰坦尼克號乘客數(shù)據(jù)處理與分析案例背景4.5.1任務說明著名的泰坦尼克號沉船事件引發(fā)了一段凄美的愛情故事,1912年4月14日23時40分左右,泰坦尼克號與一座冰山相撞,造成右舷船艏至船中部破裂,五間水密艙進水。4月15日凌晨2時20分左右,泰坦尼克船體斷裂成兩截后沉入大西洋底3700米處,多人喪生。本節(jié)就泰坦尼克號相關數(shù)據(jù)集來試分析船上人員生存率。4.5實戰(zhàn):泰坦尼克號乘客數(shù)據(jù)處理與分析任務目標4.5.1任務說明查看泰坦尼克號沉船時船體與乘客的基本信息。數(shù)據(jù)重復值處理,對數(shù)據(jù)集去除冗余屬性、查看并刪除空值等。分析乘客的艙位高低和存活率的關聯(lián)性關系。4.5實戰(zhàn):泰坦尼克號乘客數(shù)據(jù)處理與分析文件讀取與查看數(shù)據(jù)集4.5.2任務實現(xiàn)importpandasaspddf=pd.read_csv('titanic/train.csv')df.shape#查看數(shù)據(jù)集的shape屬性(891,12)4.5實戰(zhàn):泰坦尼克號乘客數(shù)據(jù)處

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論