pandas怎么使用呢?不知道的小伙伴來看看小編今天的pandas教程分享吧!
1、pandas簡介:
pandas是python+data+analysis的組合縮寫,是python中基于numpy和matplotlib的第三方數(shù)據(jù)分析庫,與后兩者共同構(gòu)成了python數(shù)據(jù)分析的基礎(chǔ)工具包,享有數(shù)分三劍客之名。
2、pandas數(shù)據(jù)結(jié)構(gòu):
pandas核心數(shù)據(jù)結(jié)構(gòu)有兩種,即一維的series和二維的dataframe,二者可以分別看做是在numpy一維數(shù)組和二維數(shù)組的基礎(chǔ)上增加了相應(yīng)的標(biāo)簽信息。正因如此,可以從兩個角度理解series和dataframe:
series和dataframe分別是一維和二維數(shù)組,因為是數(shù)組,所以numpy中關(guān)于數(shù)組的用法基本可以直接應(yīng)用到這兩個數(shù)據(jù)結(jié)構(gòu),包括數(shù)據(jù)創(chuàng)建、切片訪問、通函數(shù)、廣播機制等
series是帶標(biāo)簽的一維數(shù)組,所以還可以看做是類字典結(jié)構(gòu):標(biāo)簽是key,取值是value;而dataframe則可以看做是嵌套字典結(jié)構(gòu),其中列名是key,每一列的series是value。所以從這個角度講,pandas數(shù)據(jù)創(chuàng)建的一種靈活方式就是通過字典或者嵌套字典,同時也自然衍生出了適用于series和dataframe的類似字典訪問的接口,即通過loc索引訪問。
3、 數(shù)據(jù)讀寫:
pandas支持大部分的主流文件格式進行數(shù)據(jù)讀寫,常用格式及接口為:
文本文件,主要包括csv和txt兩種等,相應(yīng)接口為read_csv()和to_csv(),分別用于讀寫數(shù)據(jù)
Excel文件,包括xls和xlsx兩種格式均得到支持,底層是調(diào)用了xlwt和xlrd進行excel文件操作,相應(yīng)接口為read_excel()和to_excel()
SQL文件,支持大部分主流關(guān)系型數(shù)據(jù)庫,例如MySQL,需要相應(yīng)的數(shù)據(jù)庫模塊支持,相應(yīng)接口為read_sql()和to_sql()
此外,pandas還支持html、json等文件格式的讀寫操作。
4、數(shù)據(jù)訪問:
series和dataframe兼具numpy數(shù)組和字典的結(jié)構(gòu)特性,所以數(shù)據(jù)訪問都是從這兩方面入手。同時,也支持bool索引進行數(shù)據(jù)訪問和篩選。
[ ],這是一個非常便捷的訪問方式,不過需區(qū)分series和dataframe兩種數(shù)據(jù)結(jié)構(gòu)理解:
series:既可以用標(biāo)簽也可以用數(shù)字索引訪問單個元素,還可以用相應(yīng)的切片訪問多個值,因為只有一維信息,自然毫無懸念
dataframe:無法訪問單個元素,只能返回一列、多列或多行:單值或多值(多個列名組成的列表)訪問時按列進行查詢,單值訪問不存在列名歧義時還可直接用屬性符號" . "訪問。切片形式訪問時按行進行查詢,又區(qū)分?jǐn)?shù)字切片和標(biāo)簽切片兩種情況:當(dāng)輸入數(shù)字索引切片時,類似于普通列表切片;當(dāng)輸入標(biāo)簽切片時,執(zhí)行范圍查詢(即無需切片首末值存在于標(biāo)簽列中),包含兩端標(biāo)簽結(jié)果,無匹配行時返回為空,但要求標(biāo)簽切片類型與索引類型一致。例如,當(dāng)標(biāo)簽列類型(可通過df.index.dtype查看)為時間類型時,若使用無法隱式轉(zhuǎn)換為時間的字符串作為索引切片,則引發(fā)報錯。
5、數(shù)據(jù)處理:
pandas最為強大的功能當(dāng)然是數(shù)據(jù)處理和分析,可獨立完成數(shù)據(jù)分析前的絕大部分?jǐn)?shù)據(jù)預(yù)處理需求。簡單歸納來看,主要可分為以下幾個方面:
數(shù)據(jù)清洗
數(shù)據(jù)處理中的清洗工作主要包括對空值、重復(fù)值和異常值的處理:
空值
判斷空值,isna或isnull,二者等價,用于判斷一個series或dataframe各元素值是否為空的bool結(jié)果。需注意對空值的界定:即None或numpy.nan才算空值,而空字符串、空列表等則不屬于空值;類似地,notna和notnull則用于判斷是否非空
填充空值,fillna,按一定策略對空值進行填充,如常數(shù)填充、向前/向后填充等,也可通過inplace參數(shù)確定是否本地更改
刪除空值,dropna,刪除存在空值的整行或整列,可通過axis設(shè)置,也包括inplace參數(shù)
重復(fù)值
檢測重復(fù)值,duplicated,檢測各行是否重復(fù),返回一個行索引的bool結(jié)果,可通過keep參數(shù)設(shè)置保留第一行/最后一行/無保留,例如keep=first意味著在存在重復(fù)的多行時,首行被認(rèn)為是合法的而可以保留
刪除重復(fù)值,drop_duplicates,按行檢測并刪除重復(fù)的記錄,也可通過keep參數(shù)設(shè)置保留項。由于該方法默認(rèn)是按行進行檢測,如果存在某個需要需要按列刪除,則可以先轉(zhuǎn)置再執(zhí)行該方法
異常值,判斷異常值的標(biāo)準(zhǔn)依賴具體分析數(shù)據(jù),所以這里僅給出兩種處理異常值的可選方法
刪除,drop,接受參數(shù)在特定軸線執(zhí)行刪除一條或多條記錄,可通過axis參數(shù)設(shè)置是按行刪除還是按列刪除
替換,replace,非常強大的功能,對series或dataframe中每個元素執(zhí)行按條件替換操作,還可開啟正則表達(dá)式功能
數(shù)值計算
由于pandas是在numpy的基礎(chǔ)上實現(xiàn)的,所以numpy的常用數(shù)值計算操作在pandas中也適用:
通函數(shù)ufunc,即可以像操作標(biāo)量一樣對series或dataframe中的所有元素執(zhí)行同一操作,這與numpy的特性是一致的,例如前文提到的replace函數(shù),本質(zhì)上可算作是通函數(shù)。如下實現(xiàn)對數(shù)據(jù)表中逐元素求平方
廣播機制,即當(dāng)維度或形狀不匹配時,會按一定條件廣播后計算。由于pandas是帶標(biāo)簽的數(shù)組,所以在廣播過程中會自動按標(biāo)簽匹配進行廣播,而非類似numpy那種純粹按順序進行廣播。例如,如下示例中執(zhí)行一個dataframe和series相乘,雖然二者維度不等、大小不等、標(biāo)簽順序也不一致,但仍能按標(biāo)簽匹配得到預(yù)期結(jié)果
字符串向量化,即對于數(shù)據(jù)類型為字符串格式的一列執(zhí)行向量化的字符串操作,本質(zhì)上是調(diào)用series.str屬性的系列接口,完成相應(yīng)的字符串操作。尤為強大的是,除了常用的字符串操作方法,str屬性接口中還集成了正則表達(dá)式的大部分功能,這使得pandas在處理字符串列時,兼具高效和強力。例如如下代碼可用于統(tǒng)計每個句子中單詞的個數(shù)
時間類型向量化操作,如字符串一樣,在pandas中另一個得到"優(yōu)待"的數(shù)據(jù)類型是時間類型,正如字符串列可用str屬性調(diào)用字符串接口一樣,時間類型列可用dt屬性調(diào)用相應(yīng)接口,這在處理時間類型時會十分有效。
數(shù)據(jù)轉(zhuǎn)換
pandas還提供了更為強大的數(shù)據(jù)轉(zhuǎn)換方法
map,適用于series對象,功能與python中的普通map函數(shù)類似,即對給定序列中的每個值執(zhí)行相同的映射操作,不同的是series中的map接口的映射方式既可以是一個函數(shù),也可以是一個字典
apply,既適用于series對象也適用于dataframe對象,但對二者處理的粒度是不一樣的:apply應(yīng)用于series時是逐元素執(zhí)行函數(shù)操作;apply應(yīng)用于dataframe時是逐行或者逐列執(zhí)行函數(shù)操作(通過axis參數(shù)設(shè)置對行還是對列,默認(rèn)是行),僅接收函數(shù)作為參數(shù)
applymap,僅適用于dataframe對象,且是對dataframe中的每個元素執(zhí)行函數(shù)操作,從這個角度講,與replace類似,applymap可看作是dataframe對象的通函數(shù)。
合并與拼接
pandas中又一個重量級數(shù)據(jù)處理功能是對多個dataframe進行合并與拼接,對應(yīng)SQL中兩個非常重要的操作:union和join。pandas完成這兩個功能主要依賴以下函數(shù):
concat,與numpy中的concatenate類似,但功能更為強大,可通過一個axis參數(shù)設(shè)置是橫向或者拼接,要求非拼接軸向標(biāo)簽唯一(例如沿著行進行拼接時,要求每個df內(nèi)部列名是唯一的,但兩個df間可以重復(fù),畢竟有相同列才有拼接的實際意義)
merge,完全類似于SQL中的join語法,僅支持橫向拼接,通過設(shè)置連接字段,實現(xiàn)對同一記錄的不同列信息連接,支持inner、left、right和outer4種連接方式,但只能實現(xiàn)SQL中的等值連接
join,語法和功能與merge一致,不同的是merge既可以用pandas接口調(diào)用,也可以用dataframe對象接口調(diào)用,而join則只適用于dataframe對象接口
append,concat執(zhí)行axis=0時的一個簡化接口,類似列表的append函數(shù)一樣
實際上,concat通過設(shè)置axis=1也可實現(xiàn)與merge類似的效果,二者的區(qū)別在于:merge允許連接字段重復(fù),類似一對多或者多對一連接,此時將產(chǎn)生笛卡爾積結(jié)果;而concat則不允許重復(fù),僅能一對一拼接。
以上就是小編今天的分享了,希望可以幫助到大家。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com