




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章數據分析庫pandas基礎《Python數據分析與應用:從數據獲取到可視化(第2版)》學習目標/Target
掌握Series的創(chuàng)建方式,能夠通過Series類的構造方法創(chuàng)建Series類的對象
掌握DataFrame的創(chuàng)建方式,能夠通過構造方法創(chuàng)建DataFrame類的對象
熟悉索引對象的類型和特點,能夠歸納索引對象的類型和特點
掌握重置索引的方式,能夠通過reindex()方法重置對象的索引學習目標/Target
掌握索引與切片的基本用法,能夠通過索引或切片獲取數據
掌握loc和iloc屬性的基本用法,能夠使用loc和iloc屬性獲取數據
掌握讀寫數據的方式,能夠熟練地讀寫不同來源的數據
掌握數據的排序方式,能夠使用索引或值對Series或DataFrame進行排序學習目標/Target
掌握算術運算方式,能夠通過算術運算符或算術方法對數據進行算術運算
掌握統計計算的方式,能夠通過統計方法對數據進行統計計算
掌握統計描述的方式,能夠通過describe()方法描述對象的統計指標
掌握分層索引操作,能夠創(chuàng)建有分層索引的對象,使用分層索引獲取數據章節(jié)概述/Summarypandas是一個以NumPy為基礎,專門為數據分析而設計的庫,該庫中不僅提供了一些標準的數據模型,而且提供了高效操作大量數據的數據結構,被廣泛地應用到諸如金融、統計等一些領域中。pandas庫是本書的重點內容,本章只介紹一些pandas的基礎知識,更多知識會在后面的章節(jié)進行介紹。目錄/Contents01020304數據結構索引和切片操作讀寫數據數據排序目錄/Contents05060708算術運算與數據對齊統計計算與描述分層索引操作案例:陜西高考分數線統計分析數據結構3.13.1.1
Series掌握Series的結構和創(chuàng)建方式,能夠通過Series類的構造方法創(chuàng)建Series類的對象學習目標3.1.1
Series結構Series是類似于一維數組的數據結構,主要由一組數據和與之相關的索引兩部分組成,其中數據可以是任意類型的,比如整數、字符串、浮點數、Python對象等。默認是系統自動生成的位置索引,還可以是用戶自定義的標簽索引3.1.1
Series構造方法我們若希望在程序中使用Series這種數據結構,就需要先通過Series類的構造方法創(chuàng)建一個Series類的對象。in1d(ar1,
ar2,
assume_unique=False,
invert=False)
data:表示數據,它的值可以是ndarray對象、列表、字典、標量等。index:表示索引,它的值必須是可散列的,且與數據的長度相同。如果沒有給index參數傳值,則默認會使用RangeIndex
類的對象;如果data參數的值是字典且index參數的值為None,則字典的鍵會用做索引。dtype:表示數據的類型,它的值可以是numpy.dtype。3.1.1
Series創(chuàng)建Series類的對象通過向Series類的構造方法中傳入一個列表創(chuàng)建一個Series類的對象。ser_obj=pd.Series(data=['Python','C','Java','JavaScript','PHP','R'])當創(chuàng)建Series類的對象時,也可以顯式地給數據指定標簽索引。ser_obj=pd.Series(data=['Python','C','Java','JavaScript','PHP','R'],index=['a','b','c','d','e','f'])3.1.1
Series雖然我們現在只能看到用戶指定的標簽索引,但是系統仍然會生成一組位置索引,只是位置索引是隱藏的。創(chuàng)建Series類的對象3.1.1
Series還可以通過字典創(chuàng)建一個Series類的對象。year_dict={'a':2022,'b':2023,'c':2024,
'd':2025,'e':2026,'f':2027}ser_obj=pd.Series(data=year_dict)創(chuàng)建Series類的對象3.1.1
Series通過index屬性獲取Series類對象的索引。ser_obj.index獲取索引和數據通過values屬性獲取Series類對象的數據。ser_obj.values3.1.2
DataFrame掌握DataFrame的結構和創(chuàng)建方式,能夠通過DataFrame類的構造方法創(chuàng)建DataFrame類的對象學習目標3.1.2
DataFrame結構DataFrame是一個類似于二維數組或表格的數據結構,它通過行列的形式組織數據,每列數據可以是不同的數據類型。與Series相比,DataFrame也是由索引和數據兩部分組成,不同的是,DataFrame既有行索引又有列索引。DataFrame可以看作多個Series類對象的組合,它里面每一列數據是一個Series類的對象,這些對象之間共用同一個行索引。3.1.2
DataFrame構造方法我們若希望在程序中使用DataFrame這種數據結構,就需要先通過DataFrame類的構造方法創(chuàng)建一個DataFrame類的對象。DataFrame(data=None,
index=None,
columns=None,
dtype=None,
copy=None)data:表示數據,該參數可以接收ndarray對象、列表、字典或其他DataFrame類的對象。index:表示行索引。如果沒有傳入該參數,則默認會自動生成0~N的整數。columns:表示列索引。如果沒有傳入索引參數,則默認會自動生成0~N的整數。3.1.2
DataFrame創(chuàng)建DataFrame類對象importnumpyasnpimportpandasaspdarr_2d=np.arange(1,31).reshape((6,5))df_obj=pd.DataFrame(data=arr_2d)df_obj使用系統自動生成的索引3.1.2
DataFrame指定列索引系統自動生成的索引無法很好地顯示每列數據代表的含義,使數據的可讀性比較差,因此我們可以給數據指定行索引或列索引,提升數據的顯示效果。df_obj=pd.DataFrame(data=arr_2d,
columns=['No1','No2','No3','No4','No5'])df_obj3.1.2
DataFrame獲取一列數據如果想要從DataFrame類的對象中獲取一列數據,則可以通過訪問屬性的方式獲取,返回的結果是一個Series類的對象。result=df_obj.No2result※如果索引的標簽名稱中有一些特殊的字符,比如空格、下畫線等,那么通過訪問屬性的方式獲取數據顯得不太合適了,這時可以使用索引獲取數據。3.1.2
DataFrame查看摘要信息為了便于用戶從整體了解數據的摘要信息,比如每一列總共有多少個數據,每一列數據是什么類型的,哪一列缺數據等,可以使用info()方法查看。df_obj.info()<class'pandas.core.frame.DataFrame'>RangeIndex:6entries,0to5Datacolumns(total5columns):#ColumnNon-NullCountDtype----------------------------0No16non-nullint321No26non-nullint322No36non-nullint323No46non-nullint324No56non-nullint32dtypes:int32(5)memoryusage:248.0bytes3.1.2
DataFrame查看摘要信息<class'pandas.core.frame.DataFrame'>RangeIndex:6entries,0to5Datacolumns(total5columns):#ColumnNon-NullCountDtype----------------------------0No16non-nullint321No26non-nullint322No36non-nullint323No46non-nullint324No56non-nullint32dtypes:int32(5)memoryusage:248.0bytes對象的類型、行索引的相關信息、總列數3.1.2
DataFrame查看摘要信息<class'pandas.core.frame.DataFrame'>RangeIndex:6entries,0to5Datacolumns(total5columns):#ColumnNon-NullCountDtype----------------------------0No16non-nullint321No26non-nullint322No36non-nullint323No46non-nullint324No56non-nullint32dtypes:int32(5)memoryusage:248.0bytes5行4列的表格,用于描述對象的每一列數據的具體信息3.1.2
DataFrame查看摘要信息<class'pandas.core.frame.DataFrame'>RangeIndex:6entries,0to5Datacolumns(total5columns):#ColumnNon-NullCountDtype----------------------------0No16non-nullint321No26non-nullint322No36non-nullint323No46non-nullint324No56non-nullint32dtypes:int32(5)memoryusage:248.0bytes數據類型的統計信息和內存使用情況索引和切片操作3.23.2.1
索引對象熟悉索引對象的類型和特點,能夠歸納索引對象的類型和特點學習目標Index類的子類在pandas中,無論是位置索引還是標簽索引,它們都屬于Index類的對象,也就是索引對象。Index類是一個基類,它派生了很多子類,每個子類代表不同形式的索引。3.2.1
索引對象類說明示例RangeIndex位置索引(默認)0、1、2、3……NInt64Index整數索引1、-5、8、10、-9Float64Index浮點數索引-1.0、-5.5、10.2、9.8、6.3DatetimeIndex時間戳索引2022-11-2517:00:00、2022-11-2817:00:00、2022-12-2517:00:00PeriodIndex時間間隔索引2022-11-2500:00:00、2022-11-2501:00:00、2022-11-2502:00:00……MultiIndex分層索引aa、ab、ac、bd、be特性3.2.1
索引對象不可變性可重復性特性3.2.1
索引對象不可變性索引對象一旦創(chuàng)建是不可以被修改的,也就是說,索引的值是固定不變的,這樣做能夠維護從索引到數據的唯一映射關系,并保證Series或DataFrame中數據的安全。importpandasaspdser_obj=pd.Series(range(5),index=['a','b','c','d','e'])ser_index['2']='cc'TypeError:Indexdoesnotsupportmutableoperations特性3.2.1
索引對象可重復性索引對象的值是可以重復的。importpandasaspdser_obj=pd.Series(range(5),index=['a','a','c','d','e'])ser_index=ser_obj.indexser_index特性3.2.1
索引對象可重復性通常情況下,索引的值被要求是唯一的,不過并非強制的。我們可以使用索引對象的is_unique屬性判斷索引的值是否唯一。ser_index.is_unique3.2.2
重置索引掌握重置索引的方式,能夠通過reindex()方法實現重置索引的功能學習目標3.2.2
重置索引重置索引是指重新為對象設定索引,以構建一個符合新索引的對象。概念reindex()方法會對Series類或DataFrame類對象的原索引和新索引進行匹配,如果新索引跟原索引的值相同,則新索引對應的數據會被設置為原數據;如果新索引跟原索引的值不同,則新索引對應的空缺位置會被填充為NaN或指定的其他值。方法3.2.2
重置索引語法格式下面以DataFrame類的reindex()方法為例,介紹reindex()方法的語法格式。reindex(labels=None,
index=None,
columns=None,
axis=None,
method=None,
copy=True,
level=None,
fill_value=nan,
limit=None,
tolerance=None)index,columns:表示新的行索引、列索引。method:表示空缺位置的填充方式,包括'None'(默認值)、'ffill'或'pad'、'bfill或backfill'、'nearest'這幾個值,其中'None'代表不填充空缺位置;'ffill'或'pad'代表前向填充空缺位置;'bfill或backfill'代表后向填充空缺位置;'nearest'代表根據最近的值填充空缺位置。3.2.2
重置索引語法格式reindex(labels=None,
index=None,
columns=None,
axis=None,
method=None,
copy=True,
level=None,
fill_value=nan,
limit=None,
tolerance=None)copy:是否返回新的對象,默認值為True。fill_value:表示空缺位置被填充的值,默認值為NaN。limit:表示前向或者后向填充時的最大填充量。下面以DataFrame類的reindex()方法為例,介紹reindex()方法的語法格式。3.2.2
重置索引示例importpandasaspddf_obj=pd.DataFrame({'no1':[1.0,2.0,3.0],'no2':[4.0,5.0,6.0]},index=['a','b','c'])new_df=df_obj.reindex(index=['a','c','e'])new_df1.
重置DataFrame對象的索引3.2.2
重置索引示例importpandasaspddf_obj=pd.DataFrame({'no1':[1.0,2.0,3.0],'no2':[4.0,5.0,6.0]},index=['a','b','c'])new_df=df_obj.reindex(index=['a','c','e'],
fill_value=9)new_df2.
重置索引時指定填充值3.2.2
重置索引示例importpandasaspddf_obj=pd.DataFrame({'no1':[1.0,2.0,3.0],'no2':[4.0,5.0,6.0]},index=['a','b','c'])new_df=df_obj.reindex(index=['a','c','e'],
method='ffill')new_df3.
重置索引時指定填充方式3.2.3
通過索引和切片獲取數據掌握索引與切片的基本用法,能夠通過索引或切片獲取Series或DataFrame的數據學習目標3.2.3
通過索引和切片獲取數據pandas中通過索引或切片可以獲取Series類和DataFrame類對象的數據,由于Series類和DataFrame類對象的結構有所不同,所以它們的索引和切片操作也會有所不同。Series的索引和切片操作3.2.3
通過索引和切片獲取數據Series類對象與NumPy一維數組的索引用法相似,不同的是,Series類對象的索引既可以是位置索引,也可以是標簽索引。如果需要獲取Series類對象的單個數據,則可以通過位置索引和標簽索引進行獲取。importpandasaspdser_obj=pd.Series([10,20,30,40,50],index=['one','two','three','four','five'])ser_obj[2]ser_obj['three']通過位置索引獲取單個數據通過標簽索引獲取單個數據Series的索引和切片操作3.2.3
通過索引和切片獲取數據如果想要獲取Series類對象的多個數據,則可以通過包含多個位置索引或標簽索引的列表進行獲取,此過程相當于利用花式索引獲取一維數組元素的操作。ser_obj[[0,2,3]]通過位置索引獲取多個數據ser_obj[['one','three','four']]通過標簽索引獲取多個數據Series的索引和切片操作3.2.3
通過索引和切片獲取數據布爾索引同樣適用于pandas,具體用法與一維數組的布爾索引用法相同,即將Series類的對象中每個數據進行邏輯運算,只要運算結果為True,就返回Series類對象中位置為True對應的數據。ser_obj[ser_obj>20]Series的索引和切片操作3.2.3
通過索引和切片獲取數據通過切片也可以獲取Series類的對象中的部分數據。如果切片使用的索引是位置索引,則切片結果包含起始位置但不包含結束位置對應的數據;如果切片使用的索引是標簽索引,則切片結果既包含起始位置又包含結束位置對應的數據。ser_obj[1:3]通過位置索引進行切片操作ser_obj['two':'four']通過標簽索引進行切片操作DataFrame的索引和切片操作3.2.3
通過索引和切片獲取數據DataFrame類對象與NumPy二維數組的索引用法相似,它里面每一列數據都是一個Series類的對象,可以通過列索引進行獲取。importnumpyasnpimportpandasaspdarr=np.arange(12).reshape(3,4)df_obj=pd.DataFrame(arr,index=['row_1','row_2',
'row_3'],columns=['col_1','col_2','col_3','col_4'])df_obj['col_2']DataFrame的索引和切片操作3.2.3
通過索引和切片獲取數據如果想要從DataFrame類對象中獲取多列數據,那么可以將多個索引存放到列表中,再分別根據列表里面的每個索引進行獲取,此過程相當于利用花式索引獲取二維數組元素的操作。df_obj[['col_1','col_3']]DataFrame的索引和切片操作3.2.3
通過索引和切片獲取數據如果想要從DataFrame類對象中獲取多行數據,那么可以通過切片完成。df_obj[1:3]
還可以通過切片獲取部分行部分列的數據。df_obj[1:3][['col_1','col_3']]3.2.4
通過loc和iloc屬性獲取數據掌握loc和iloc屬性的基本用法,能夠使用loc和iloc屬性獲取Series或DataFrame的數據學習目標3.2.4
通過loc和iloc屬性獲取數據前面介紹索引和切片的相關操作時,既可以單獨使用位置索引或標簽索引來獲取數據,也可以混合使用位置索引、標簽索引進行獲取,這對剛接觸pandas的開發(fā)人員來說是十分混亂的。為了從嚴格意義上區(qū)分位置索引和標簽索引的相關操作,pandas中提供了兩個非常重要的屬性,分別是loc和iloc,其中l(wèi)oc是基于標簽索引的索引器,iloc是基于位置索引的索引器。3.2.4
通過loc和iloc屬性獲取數據通過loc屬性獲取數據loc屬性用于根據標簽索引來獲取數據。Series.loc[參數]DataFrame.loc[參數1,參數2]單個標簽索引,比如a、No1、row_1、col_1等。標簽索引構成的列表或數組,比如['a','b','c']、['col_1','col_3']等?;跇撕炈饕那衅热?a':'c'、'two':'four'。布爾類型的列表或數組,比如[True,False,True]?!鶇?和參數2中涉及的索引分別是行索引和列索引,如果省略參數2,則此時獲取的結果是DataFrame類的對象的一行或多行數據。3.2.4
通過loc和iloc屬性獲取數據通過loc屬性獲取數據importpandasaspdser_obj=pd.Series([10,20,30,40,50],index=['row1','row2','row3','row4','row5'])1.
獲取Series類對象的數據ser_obj.loc['row2']ser_obj.loc[['row2','row5']]ser_obj.loc['row3':'row5']ser_bool=ser_obj<30ser_obj.loc[ser_bool]獲取單個數據獲取多個數據獲取多個連續(xù)數據獲取符合條件的數據3.2.4
通過loc和iloc屬性獲取數據通過loc屬性獲取數據arr=np.arange(12).reshape(3,4)df_obj=pd.DataFrame(arr,index=['row_1','row_2','row_3'],
columns=['col_1','col_2','col_3','col_4'])2.
獲取DataFrame類對象的數據df_obj.loc['row_1']df_obj.loc[['row_1','row_3']]df_obj.loc['row_1':'row_2']df_obj.loc[[True,False,True]]獲取一行數據獲取多行數據獲取連續(xù)多行數據獲取符合條件多行數據3.2.4
通過loc和iloc屬性獲取數據通過loc屬性獲取數據arr=np.arange(12).reshape(3,4)df_obj=pd.DataFrame(arr,index=['row_1','row_2','row_3'],
columns=['col_1','col_2','col_3','col_4'])2.
獲取DataFrame類對象的數據df_obj.loc['row_3','col_3']df_obj.loc['row_1':'row_3',['col_1','col_3']]獲取單個數據獲取多列數據3.2.4
通過loc和iloc屬性獲取數據通過iloc屬性獲取數據iloc屬性用于根據位置索引來獲取數據。Series.iloc[參數]DataFrame.iloc[參數1,參數2]單個位置索引,比如0、1、2、3等。位置索引構成的列表或數組,比如[0,2,3]等?;谖恢盟饕那衅热?:2、2:5。布爾類型的列表或數組,比如[True,False,True]。3.2.4
通過loc和iloc屬性獲取數據通過iloc屬性獲取數據df_obj.iloc[0]df_obj.iloc[[0,2]]df_obj.iloc[0:2]df_obj.iloc[[True,False,True]]獲取一行數據獲取多行數據獲取連續(xù)多行數據獲取符合條件多行數據df_obj.iloc[2,2]df_obj.iloc[0:3,[0,2]]獲取單個數據獲取多列數據讀寫數據3.33.3.1
讀寫CSV和TXT文件的數據掌握讀寫數據的方式,能夠熟練地讀寫CSV文件、TXT文件的數據學習目標3.3.1
讀寫CSV和TXT文件的數據CSV和TXT文件是日常生活中常用的純文本文件,它們只能保存文本的內容,不能保存文本的樣式,其中CSV文件通常以逗號或制表符為分隔符,可以通過Excel、記事本等文本編輯器進行查看。3.3.1
讀寫CSV和TXT文件的數據pandas中提供了一個read_csv()函數,該函數用于從CSV或TXT文件中讀取數據,pandas的Series
和DataFrame類中還提供了一個to_csv()方法,該方法用于向CSV或TXT文件中寫入數據。3.3.1
讀寫CSV和TXT文件的數據通過to_csv()方法向文本文件寫入數據to_csv()方法會向指定路徑下的CSV或TXT文件中寫入部分或全部數據,如果文件不存在,則會新建一個文件;如果文件已經存在,則會覆蓋文件中的內容。to_csv(path_or_buf=None,
sep=',',
na_rep='',
float_format=None,
columns=None,
header=True,
...,
storage_options=None)path_or_buf:表示文件路徑,文件路徑可以是絕對路徑和相對路徑。如果該參數的值是一個文件的名稱,則該文件會被保存到當前路徑。sep:表示文件使用的字段分隔符,默認值是','。分隔符的長度必須為1。na_rep:表示缺失數據的表示方式,默認值是空字符串。3.3.1
讀寫CSV和TXT文件的數據通過to_csv()方法向文本文件寫入數據to_csv()方法會向指定路徑下的CSV或TXT文件中寫入部分或全部數據,如果文件不存在,則會新建一個文件;如果文件已經存在,則會覆蓋文件中的內容。to_csv(path_or_buf=None,
sep=',',
na_rep='',
float_format=None,
columns=None,
header=True,
...,
storage_options=None)columns:表示向文件中寫入哪幾列的數據。header:表示文件顯示的列標題。index:表示是否向文件中寫入行索引,默認值為True。3.3.1
讀寫CSV和TXT文件的數據通過read_csv()函數從文本文件中讀取數據read_csv()函數會從指定路徑下的CSV或TXT文件中讀取數據,讀取成功后會根據數據形式轉換成一個Series或DataFrame類的對象。read_csv(filepath_or_buffer,
sep=NoDefault.no_default,
delimiter=None,
header='infer',
...,
storage_options=None)filepath_or_buffer:表示文件的路徑。sep:表示文件使用的分隔符。如果沒有指定分隔符,則會嘗試使用逗號進行分隔。header:指定文件中的哪一行作為列索引以及數據的開頭。names:表示要使用的列名稱的列表。encoding:表示讀取文件時使用的編碼格式。3.3.1
讀寫CSV和TXT文件的數據通過read_csv()函數從文本文件中讀取數據除了使用read_csv()函數讀取TXT文件外,還可以使用read_table()函數讀取TXT文件,兩者的區(qū)別在于默認使用的分隔符不同,前者使用的分隔符是逗號,后面使用的分隔符是制表符(\t)。3.3.1
讀寫CSV和TXT文件的數據多學一招:預覽部分數據當從文件中讀取完數據后,如果想知道數據是否真正地讀取成功,可以挑選出幾行數據進行快速預覽。pandas中提供了兩個常用的方法head()和tail(),其中head()方法用于預覽前N行數據,默認是前5行數據;tail()方法用于預覽后N行數據,默認是后5行數據。3.3.2
讀寫Excel文件的數據掌握讀寫數據的方式,能夠熟練地讀寫Excel文件的數據學習目標3.3.2
讀寫Excel文件的數據Excel文件是數據分析工作中比較常用的存儲數據的文件,它里面可以添加若干個工作表(Sheet),每個工作表都是以表格的形式顯示數據,并支持對數據進行統計、分析等操作。3.3.2
讀寫Excel文件的數據pandas中提供了讀寫Excel文件數據的功能,分別是to_excel()方法和read_excel()函數,其中to_excel()方法用于向Excel文件中寫入數據,read_excel()函數用于從Excel文件中讀取數據3.3.2
讀寫Excel文件的數據通過to_excel()向Excel文件寫入數據to_excel()方法會將Series或DataFrame類的對象寫入到Excel文件中,如果Excel文件不存在,則會新建一個文件,反之則會將原文件中的內容進行覆蓋。to_excel(excel_writer,
sheet_name='Sheet1',
na_rep='',
float_format=None,
columns=None,
header=True,
...,
storage_options=None)excel_writer:表示寫入文件的路徑。sheet_name:表示工作表的名稱,可以接收字符串,默認值為“Sheet1”。na_rep:表示缺失數據的表現形式。index:表示是否向文件中寫入行索引,默認為True。3.3.2
讀寫Excel文件的數據通過read_excel()從Excel文件讀取數據read_excel()函數用于讀取Excel文件中的數據,并根據數據的形式轉換成Series或DataFrame類的對象。read_excel(io,
sheet_name=0,
header=0,
names=None,
index_col=None,
usecols=None,
squeeze=None,
dtype=None,
...,
storage_options=None)io:表示文件的路徑。sheet_name:指定要讀取的工作表的名稱,默認值為0,說明讀取第一個工作表。header:指定文件中的哪一行數據作為DataFrame類對象的列索引。names:表示要使用的列名稱。3.3.2
讀寫Excel文件的數據通過read_excel()從Excel文件讀取數據read_excel()函數用于讀取Excel文件中的數據,并根據數據的形式轉換成Series或DataFrame類的對象。read_excel(io,
sheet_name=0,
header=0,
names=None,
index_col=None,
usecols=None,
squeeze=None,
dtype=None,
...,
storage_options=None)index_col:指定文件中的哪一列數據作為DataFrame的行索引。usecols:指定讀取哪幾列的數據,默認值為None,說明會讀取所有列的數據。該參數可以接收一個列表,列表中的元素分別對應列的編號,編號從0開始。3.3.3
讀取網頁表格的數據掌握讀取網頁表格的方式,能夠熟練地通過read_html()函數讀取網頁表格的數據學習目標3.3.3
讀取網頁表格的數據在瀏覽網頁時,有些數據會在HTML網頁中以表格的形式進行展示,對于這部分數據,我們可以使用pandas中的read_html()函數讀取,讀取成功后會返回一個列表,該列表中包含對應網頁表格的DataFrame類的對象。read_html(io,
match='.+',
flavor=None,
header=None,
index_col=None,
skiprows=None,
attrs=None,
...,
displayed_only=True)io:表示HTML網頁的字符串、路徑對象或類似文件的對象。若參數io的值是字符串,則字符串的內容可以是URL,也可以是HTML。match:表示返回包含與正則表達式或字符串匹配的文本的一組表格,默認值為'.+',說明匹配任何非空字符串。header:用于指定列標題所在的行。index_col:用于指定行標題所在的列。3.3.3
讀取網頁表格的數據TIOBE排行榜是根據互聯網上有經驗的程序員、課程和第三方廠商的數量,并使用搜索引擎統計出排名數據,用于反映編程語言的熱門程度。2022年發(fā)布的歷年最佳編程語言排行榜(部分)3.3.4
讀寫數據庫掌握讀寫數據庫的方式,能夠熟練讀寫數據庫的數據學習目標3.3.4
讀寫數據庫大多數情況下,海量的數據是使用數據庫進行存儲的,這主要是依賴于數據庫的數據共享性、獨立性等一些特點。因此,在實際生產環(huán)境中,絕大數的數據是存儲在數據庫中的。pandas
支持MySQL、Oracle、SQLite等主流數據庫的讀寫操作,本書介紹的是MySQL數據庫。3.3.4
讀寫數據庫讀寫函數或方法函數/方法說明read_sql_table()根據數據表名稱讀取數據庫的數據,并將讀取的結果轉換成一個DataFrame類的對象后返回read_sql_query()根據SQL語句讀取數據庫的數據,并將讀取的結果轉換成一個DataFrame類的對象后返回read_sql()上述兩個函數的結合,可以根據數據表名稱或SQL語句讀取數據庫的數據to_sql()將Series類或DataFrame類的對象寫入到數據庫中※read_sql_table()和read_sql_query()函數都可以將讀取的數據轉換為DataFrame對象,前者表示將整張表的數據轉換成DataFrame類的對象,后者則表示將執(zhí)行SQL語句的結果轉換為DataFrame類的對象。3.3.4
讀寫數據庫讀寫函數或方法在連接MySQL數據庫時需要用到SQLAlchemy、PyMySQL模塊,其中SQLAlchemy模塊提供了與不同數據庫連接的功能,而PyMySQL模塊提供了Python操作MySQL數據庫的功能。如果當前的Python環(huán)境中沒有這兩個模塊,則需要分別使用“pipinstallsqlalchemy==1.4.39”“pipinstallpymysql==1.0.2”命令安裝這幾個模塊。3.3.4
讀寫數據庫通過to_sql()方法向數據庫寫入數據to_sql()方法的功能是將Series類或DataFrame類的對象以數據表的形式寫入到數據庫中。to_sql(name,con,schema=None,if_exists='fail',index=True,index_label=None,chunksize=None,dtype=None)name:表示數據表的名稱。con:表示數據庫的連接信息。該參數的值可以是Engine類或Connection類的對象。若希望創(chuàng)建一個Engine類的對象,則需要通過create_engine()函數實現,該函數需要接收一個符合格式要求的字符串,具體格式為“數據庫類型+數據庫驅動名稱://用戶名:密碼@機器地址:端口號/數據庫名”。3.3.4
讀寫數據庫通過to_sql()方法向數據庫寫入數據to_sql()方法的功能是將Series類或DataFrame類的對象以數據表的形式寫入到數據庫中。to_sql(name,con,schema=None,if_exists='fail',index=True,index_label=None,chunksize=None,dtype=None)if_exists:當數據表存在時如何操作數據表,該參數可以取值為fail、replace或append,默認值為fail。其中fail表示不執(zhí)行寫入操作;replace表示將原數據表刪除后再重新創(chuàng)建;append表示在原數據表的基礎上追加數據。index:表示是否將DataFrame的行索引作為數據傳入數據庫,默認為True。index_label:表示是否引用索引名稱。如果index設為True,此參數為None,表示使用默認名稱;如果index為分層索引,則它的值必須是序列類型的。3.3.4
讀寫數據庫通過to_sql()方法向數據庫寫入數據使用to_sql()方法向數據庫寫入數據時,如果要寫入的數據表名與數據庫中其他的數據表名相同,則會導致程序出現異常,并反饋該數據表已存在的異常信息。3.3.4
讀寫數據庫通過read_sql()函數從數據庫讀取數據read_sql()函數既可以讀取整張數據表,又可以執(zhí)行SQL語句。read_sql(sql,con,index_col=None,coerce_float=True,params=None,parse_dates=None,columns=None,chunksize=None)sql:表示被執(zhí)行的SQL語句。con:接收數據庫連接,表示數據庫的連接信息。index_col:表示將數據表中的列標題作為DataFrame類對象的行索引。coerce_float:將非字符串、非數字對象的值轉換為浮點型數據。params:傳遞給執(zhí)行方法的參數列表,如params={‘name’:’value’}?!绻麛祿写嬖诳罩?,則會使用NaN進行補全。數據排序3.43.4.1
按索引排序掌握按索引排序的方式,能夠通過sort_index()方法根據行索引或列索引排序學習目標3.4.1
按索引排序sort_index()方法可以根據行索引或列索引的大小對Series類和DataFrame類的對象進行排序。sort_index(axis=0,
level=None,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
sort_remaining=True,
ignore_index=False,
key=None)axis:表示沿著哪個方向的軸排序,該參數的取值可以是0或'index'、1或'columns',其中0或'index'表示按行方向排序,1或'columns'表示按列方向排序。ascending:表示是否升序排列,默認值為True。kind:表示排序算法,可以取值為‘quicksort’,‘mergesort’,‘heapsort’,‘stable’,其中‘quicksort’表示快速排序算法,‘mergesort’表示歸并排序算法,‘heapsort’表示堆排序算法,‘stable’表示穩(wěn)定排序算法。3.4.2
按值排序掌握按值排序的方式,能夠通過sort_values()方法根據值的大小排序學習目標3.4.2
按值排序pandas中為Series類和DataFrame類的對象提供了按值排序的方法sort_values()。以DataFrame類的方法為例,sort_values()方法的語法格式如下。sort_values(by,
axis=0,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
ignore_index=False,
key=None)by:表示排序的列。na_position:表示NaN值的位置,它只有first和last兩種取值,默認值為last。若設為first,則會將NaN值放在開頭;若設為False,則會將NaN值放在最后。3.4.2
按值排序若sort_values()方法操作的對象是一個DataFrame類的對象,則可以根據該對象中一列或多列的值進行排序,不過需要將一個或多個列的索引傳遞給by參數才行。df_obj=pd.DataFrame([[0.4,-0.1,-0.3,0.0],
[0.2,0.6,-0.1,-0.7],
[0.8,0.6,-0.5,0.1]])df_obj.sort_values(by=2)算術運算與數據對齊3.53.5
算術運算與數據對齊掌握算術運算操作,能夠通過算術運算符或算術方法實現算術運算操作學習目標3.5
算術運算與數據對齊在pandas中,Series類或DataFrame類的對象進行算術運算時,會先將索引相同的數據按位置對齊,對齊以后再進行相應的運算,沒有對齊的位置會用NaN進行補齊。obj_one=pd.Series(range(10,13),index=range(3))obj_oneobj_two=pd.Series(range(20,25),index=range(5))obj_twoobj_one+obj_two010111212dtype:int64020121222323424dtype:int32030.0132.0234.03NaN4NaNdtype:float643.5
算術運算與數據對齊如果希望不使用NAN補齊,則可以在調用add()方法時給fill_value參數傳值,fill_value將會使用對象中存在的數據進行補充。obj_one.add(obj_two,fill_value=0)統計計算與描述3.63.6.1
統計計算掌握統計計算的方式,能夠通過統計方法對DataFrame中的數據進行統計計算學習目標3.6.1
統計計算統計計算方法方法說明sum()計算和mean()計算平均值median()計算中位數max()、min()計算最大值和最小值idxmax()計算最大索引值idxmin()計算最小索引值count()計算非NaN值的個數3.6.1
統計計算統計計算方法方法說明var()計算樣本值的方差std()計算樣本值的標準差skew()計算樣本值的偏度(三階矩)kurt()計算樣本值的峰度(四階矩)cumsum()計算樣本值的累加和cummin()、cummax()計算樣本值的累積最小值和累積最大值cumprod()計算樣本值的累乘積3.6.2
統計描述掌握統計描述的方式,能夠通過describe()方法描述DataFrame類的對象的統計指標學習目標3.6.2
統計描述如果希望一次性描述Series類或DataFrame類對象的多個統計指標,比如平均值、最大值、最小值、求和等,則我們可以調用describe()方法實現,而不用逐個調用各個統計計算方法計算。describe(percentiles=None,
include=None,
exclude=None)percentiles:表示結果包含的百分數,位于[0,1]之間。若不設置該參數,則默認為[0.25,0.5,0.75],即展示25%、50%、75%分位數。include:表示結果中包含數據類型的白名單,默認為None。exclude:表示結果中忽略數據類型的黑名單,默認為None。分層索引操作3.73.7.1
創(chuàng)建分層索引掌握分層索引的創(chuàng)建方式,能夠通過多種方式創(chuàng)建分層索引學習目標3.7.1
創(chuàng)建分層索引分層索引分層索引可以理解為單層索引的延伸,即在一個軸方向上具有兩層或兩層以上的索引。外層索引內層索引3.7.1
創(chuàng)建分層索引創(chuàng)建分層索引的方法根據嵌套列表創(chuàng)建MultiIndex類的對象。from_arrays()根據元組列表創(chuàng)建MultiIndex類的對象。from_tuples()從多個集合的笛卡爾乘積中創(chuàng)建MultiIndex類的對象。from_product()在pandas中,分層索引其實就是一個MultiIndex類的對象。MultiIndex類中提供了一些創(chuàng)建分層索引的方法。3.7.1
創(chuàng)建分層索引創(chuàng)建分層索引的方法frompandasimportMultiIndexlist_tuples=[('A','A1'),('A','A2'),('B','B1'),
('B','B2'),('B','B3')]multi_index=MultiIndex.from_tuples(tuples=list_tuples,
names=['外層索引','內層索引'])multi_index1.
通過from_tuples()方法創(chuàng)建MultiIndex類的對象from_tuples()方法可以根據包含若干個元組的列表創(chuàng)建MultiIndex類的對象,其中元組的第一個元素作為外層索引,元組的第二個元素作為內層索引。3.7.1
創(chuàng)建分層索引創(chuàng)建分層索引的方法frompandasimportMultiIndexmulti_array=MultiIndex.from_arrays(arrays=
[['A','B','A','B','B'],['A1','A2','B1','B2','B3']],names=['外層索引','內層索引'])multi_array2.
通過from_arrays()方法創(chuàng)建MultiIndex類的對象from_arrays()方法用于根據一個嵌套列表創(chuàng)建MultiIndex類的對象,其中嵌套的第一個列表將作為外層索引,嵌套的第二個列表將作為內層索引。3.7.1
創(chuàng)建分層索引創(chuàng)建分層索引的方法frompandasimportMultiIndeximportpandasaspdnumbers=[0,1,2]colors=['green','purple']multi_product=pd.MultiIndex.from_product(iterables=[numbers,colors],names=['number','color'])multi_product3.
通過from_product()方法創(chuàng)建MultiIndex類的對象from_product()方法用于從多個集合的笛卡爾乘積創(chuàng)建一個MultiIndex類的對象。3.7.1
創(chuàng)建分層索引多學一招:笛卡爾乘積在數學中,兩個集合X和Y的笛卡尓積,又稱直積,表示為X
×
Y,第一個對象是X的成員,而第二個對象是Y的所有可能有序對的其中一個成員
。3.7.1
創(chuàng)建分層索引多學一招:笛卡爾乘積假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。012ab(a,0)(a,1)(a,2)(b,2)(b,1)(b,0)BAA×B3.7.2
創(chuàng)建有分層索引的對象掌握有分層索引對象的創(chuàng)建方式,能夠通過兩種方式創(chuàng)建有分層索引的對象學習目標3.7.2
創(chuàng)建有分層索引的對象常見方式importnumpyasnpimportpandasaspdmulitindex_series=pd.Series([14530,13829,12047,7813,7568,
6239,15236,8291],
index=[['河北省
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度產品召回風險承擔協議書
- 2025年度生物科技私下股份分配與成果轉化協議書
- 2025年度再婚家庭婚姻和解及子女撫養(yǎng)協議
- 2025年度企業(yè)年鑒圖文編纂及出版協議
- 2025年度安防系統智能化升級與維護合同
- 2025年度企業(yè)內部控制體系建設咨詢合同模板
- 旅游景區(qū)民宿租賃居間合同
- 2025年度保險銷售人員勞動合同解除與賠償規(guī)范
- 2025年度三年勞動合同漲薪與員工職業(yè)規(guī)劃輔導合同
- 2025年度雙方經濟糾紛一次性解決及確認協議
- 2022年鄭州衛(wèi)生健康職業(yè)學院單招英語模擬試題(附答案解析)
- Q∕GDW 10354-2020 智能電能表功能規(guī)范
- 小學數學四年級下冊培優(yōu)補差記錄
- 人教版三年級下冊體育與健康教案(全冊教學設計)
- DB61∕T 5006-2021 人民防空工程標識標準
- 土壤學習題與答案
- 產品結構設計(課堂PPT)
- 第九課_靜止的生命
- 尖尖的東西我不碰(課堂PPT)
- 工程勘察和設計承攬業(yè)務的范圍
- 數字化影像與PACS教學大綱
評論
0/150
提交評論