相關(guān)學(xué)習(xí)推薦:python教程
成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的色尼網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
在python中,今天我們開始介紹一個新的常用的計算工具庫,它就是大名鼎鼎的Pandas。
Pandas的全稱是Python Data Analysis Library,是一種基于Numpy的科學(xué)計算工具。它的特點就是可以像是操作數(shù)據(jù)庫當(dāng)中的表一樣操作結(jié)構(gòu)化的數(shù)據(jù),所以它支持許多復(fù)雜和高級的操作,可以認為是Numpy的加強版。它可以很方便地從一個csv或者是excel表格當(dāng)中構(gòu)建出完整的數(shù)據(jù),并支持許多表級別的批量數(shù)據(jù)計算接口。
安裝使用和幾乎所有的Python包一樣,pandas也可以通過pip進行安裝。如果你裝過Anaconda套件的話,那么像是numpy、pandas等庫已經(jīng)自動安裝好了,如果沒有安裝過也沒有關(guān)系,我們使用一行命令即可完成安裝。
pip install pandas復(fù)制代碼
和Numpy一樣,我們在使用pandas的時候通常也會給它起一個別名,pandas的別名是pd。所以使用pandas的慣例都是:
import pandas as pd復(fù)制代碼
如果你運行這一行沒有報錯的話,那么說明你的pandas已經(jīng)安裝好了。一般和pandas經(jīng)常一起使用的還有另外兩個包,其中一個也是科學(xué)計算包叫做Scipy,另外一個是對數(shù)據(jù)進行可視化作圖的工具包,叫做Matplotlib。我們也可以使用pip將這兩個包一起安裝了,在之后的文章當(dāng)中,用到這兩個包的時候,也會簡單介紹一下它們的用法。
pip install scipy matplotlib復(fù)制代碼Series 索引
在pandas當(dāng)中我們最常用的數(shù)據(jù)結(jié)構(gòu)有兩個,一個是Series另外一個是DataFrame。其中series是一維數(shù)據(jù)結(jié)構(gòu),可以簡單理解成一維數(shù)組或者是一維向量。而DataFrame自然就是二維數(shù)據(jù)結(jié)構(gòu)了,可以理解成表或者是二維數(shù)組。
我們先來看看Series,Series當(dāng)中存儲的數(shù)據(jù)主要有兩個,一個是一組數(shù)據(jù)構(gòu)成的數(shù)組,另外一個是這組數(shù)據(jù)的索引或者是標(biāo)簽。我們簡單創(chuàng)建一個Series打印出來看一下就明白了。
這里我們隨意創(chuàng)建了一個包含四個元素的Series,然后將它打印了出來。可以看到打印的數(shù)據(jù)一共有兩列,第二列是我們剛才創(chuàng)建的時候輸入的數(shù)據(jù),第一列就是它的索引。由于我們創(chuàng)建的時候沒有特意指定索引,所以pandas會自動為我們創(chuàng)建行號索引,我們可以通過Series類型當(dāng)中的values和index屬性查看到Series當(dāng)中存儲的數(shù)據(jù)和索引:
這里輸出的values是一個Numpy的數(shù)組,這并不奇怪,因為我們前面說了,pandas是一個基于Numpy開發(fā)的科學(xué)計算庫,Numpy是它的底層。從打印出來的index的信息當(dāng)中,我們可以看到這是一個Range類型的索引,它的范圍以及步長。
索引是Series構(gòu)建函數(shù)當(dāng)中的一個默認參數(shù),如果我們不填,它默認會為我們生成一個Range索引,其實也就是數(shù)據(jù)的行號。我們也可以自己指定數(shù)據(jù)的索引,比如我們在剛才的代碼當(dāng)中加入index這個參數(shù),我們就可以自己指定索引了。
當(dāng)我們指定了字符類型的索引之后,index返回的結(jié)果就不再是RangeIndex而是Index了。說明pandas內(nèi)部對數(shù)值型索引和字符型索引是做了區(qū)分的。
有了索引,自然是用來查找元素用的。我們可以直接將索引當(dāng)做是數(shù)組的下標(biāo)使用,兩者的效果是一樣的。不僅如此,索引數(shù)組也是可以接受的,我們可以直接查詢?nèi)舾蓚€索引的值。
另外在創(chuàng)建Series的時候,重復(fù)的索引也是允許的。同樣當(dāng)我們使用索引查詢的時候也會得到多個結(jié)果。
不僅如此,像是Numpy那樣的bool型索引也依然是支持的:
Series計算Series支持許多類型的計算,我們可以直接使用加減乘除操作對整個Series進行運算:
也可以使用Numpy當(dāng)中的運算函數(shù)來進行一些復(fù)雜的數(shù)學(xué)運算,但是這樣計算得到的結(jié)果會是一個Numpy的array。
因為Series當(dāng)中有索引,所以我們也可以使用dict的方式判斷索引是否在Series當(dāng)中:
Series有索引也有值,其實和dict的存儲結(jié)構(gòu)是一樣的,所以Seires也支持通過一個dict來初始化:
通過這種方式創(chuàng)建出來的順序就是dict當(dāng)中key存儲的順序,我們可以在創(chuàng)建的時候指定index,這樣就可以控制它的順序了。
我們在指定index的時候額外傳入了一個沒有在dict當(dāng)中出現(xiàn)過的key,由于在dict當(dāng)中找不到對應(yīng)的值,Series會將它記成NAN(Not a number)。可以理解成是非法值或者是空值,在我們處理特征或者是訓(xùn)練數(shù)據(jù)的時候,經(jīng)常會遇到存在一些條目的數(shù)據(jù)的某個特征空缺的情況,我們可以通過pandas當(dāng)中isnull和notnull函數(shù)檢查空缺的情況。
當(dāng)然Series當(dāng)中也有isnull的函數(shù),我們也可以調(diào)用。
最后,Series當(dāng)中的index也是可以修改的, 我們可以直接給它賦上新值:
總結(jié)從核心本質(zhì)上來說,pandas當(dāng)中的Series就是在Numpy一維數(shù)組上做的一層封裝,加上了索引等一些相關(guān)的功能。所以我們可以想見DataFrame其實就是一個Series的數(shù)組的封裝,加上了更多數(shù)據(jù)處理相關(guān)的功能。我們把核心結(jié)構(gòu)把握住了,再來理解整個pandas的功能要比我們一個一個死記這些api有用得多。
pandas是Python數(shù)據(jù)處理的一大利器,作為一個合格的算法工程師幾乎是必會的內(nèi)容,也是我們使用Python進行機器學(xué)習(xí)以及深度學(xué)習(xí)的基礎(chǔ)。根據(jù)調(diào)查資料顯示,算法工程師日常的工作有70%的份額投入在了數(shù)據(jù)處理當(dāng)中,真正用來實現(xiàn)模型、訓(xùn)練模型的只有30%不到。因此可見數(shù)據(jù)處理的重要性,想要在行業(yè)當(dāng)中有所發(fā)展,絕不僅僅是學(xué)會模型就足夠的。
本文使用 mdnice 排版
想了解更多編程學(xué)習(xí),敬請關(guān)注php培訓(xùn)欄目!