【數據科學系統學習】Python # 數據分析基本操做[二] pandas

咱們在上一篇介紹了 NumPy,本篇介紹 pandas。python


pandas入門

Pandas 是基於Numpy構建的,讓以NumPy爲中心的應用變的更加簡單。segmentfault

pandas的數據結構介紹

Series數組


由一組數據(各類 NumPy 數據類型)和一組索引組成:數據結構

clipboard.png

Valuesindex 屬性:app

clipboard.png

給所建立的Series帶有一個能夠對各個數據點進行標記的索引:函數

clipboard.png

與普通NumPy數組相比,能夠經過索引的方式選取Series中的單個或一組值:spa

clipboard.png

可將Series當作是一個定長的有序字典,它是索引值到數據值的一個映射(它能夠用在許多本來須要字典參數的函數中)。.net

若是數據被存放在一個 python 字典中,能夠直接經過這個字典來建立Series設計

clipboard.png

若是隻傳入一個字典,則結果Series中的索引就是原字典的鍵(有序排列),上面的states3d


Series最重要的一個功能是在算數運算中自動對齊不一樣索引的數據:

clipboard.png

Series對象自己及其索引都有一個name屬性

clipboard.png


Series的索引能夠經過賦值的方式就地修改:

clipboard.png


DataFrame


是一個表格型的數據結構。既有行索引也有列索引DataFrame中面向行和麪向列的操做基本是平衡的。DataFrame中的數據是以一個或多個二維塊存放的。用層次化索引,將其表示爲更高維度的數據。

構建 DataFrame:直接傳入一個由等長列表或 NumPy 數組組成的字典。

clipboard.png


會自動加上索引,但指定列序列,則按指定順序進行排列:

clipboard.png


Series同樣,若是傳入的列在數據中找不到,就會產生NA值:

clipboard.png

clipboard.png


經過賦值的方式進行修改:

clipboard.png

經過相似字典標記的方式或屬性的方式,能夠將DataFrame的列獲取爲一個Series

clipboard.png

行也能夠經過位置或名稱的方式進行獲取,好比用索引字段ix

將列表或數組賦值給某個列時,其長度必須跟DataFrame的長度相匹配。若是賦值的是一個Series,就會精確匹配DataFrame的索引,全部的空位都將被填上缺失值:

clipboard.png

給不存在的列賦值會建立出一個新列,關鍵字del用於刪除列:

clipboard.png

經過索引方式返回的列是相應數據的視圖,並非副本,對返回的Series作的任何修改都會反映到源DataFrame上,經過seriescopy方法便可顯式地複製列。

另外一種常見的數據形式是嵌套字典,若是將它傳給DataFrame,解釋爲——外層字典的鍵做爲列,內層鍵做爲行索引。

clipboard.png

對結果進行轉置:

clipboard.png

指定索引按序列:

clipboard.png

Series組成的字典差很少也是同樣的用法:

clipboard.png

設置了DataFrameindexcolumnsname 屬性,這些信息也會被顯示,values 屬性以二維ndarray的形式返回DataFrame中的數據:

clipboard.png

若是DataFrame各列的數據類型不一樣,值數組的數據類型就會選用能兼容全部列的數據類型(如 dtype = object)。


索引對象


pandas的索引對象,管理軸標籤和其餘元數據(如軸名稱等)。

構建SeriesDataFrame時,所用到的任何數組或其餘序列的標籤都會被轉換成一個Index,且Index對象是不可修改的:

clipboard.png

Index的功能相似一個固定大小的集合:

clipboard.png


基本功能

從新索引


方法 reindex:建立一個適應新索引的新對象。

clipboard.png

調用該Seriesreindex將會根據新索引進行重排。若是某個索引值當前不存在,就引入缺失值。

clipboard.png


對於時間序列這樣的有序數據,從新索引時可能須要作一些差值處理:

clipboard.png


對於DataFramereindex能夠修改行、列索引,或兩個都修改。若是僅傳入一列,則會從新索引行:

clipboard.png

使用columns關鍵字可從新索引列:

clipboard.png

同時對行、列進行索引:

clipboard.png


ix標籤索引功能:

clipboard.png


丟棄制定軸上的項


drop方法返回的是一個在指定軸上刪除了指定值的新對象:

clipboard.png

對於DataFrame,能夠刪除任意軸上的索引值:

clipboard.png

clipboard.png


索引、選取和過濾


Series索引的工做方式相似於NumPy數組的索引,但Series的索引值不僅是整數:

clipboard.png


利用標籤的切片運算,其包含閉區間(與普通 python 切片運算不一樣):

clipboard.png


DataFrame進行索引就是獲取一個列:

clipboard.png

或多個列:

clipboard.png

這種索引方式的特殊狀況:經過切片或布爾型數組選取行。

clipboard.png


另外一種用法是經過布爾型DataFrame進行索引(在語法上更像 ndarray):

clipboard.png

專門的索引字段 ix,是一種從新索引的簡單手段:

clipboard.png


算術運算和數據對齊


pandas最重要的一個功能是對不一樣索引的對象進行算術運算。

對不一樣的索引對,取並集:

clipboard.png

自動的數據對齊操做在不重疊的索引出引入了NA值,即一方有的索引,另外一方沒有,運算後該處索引的值爲缺失值。

DataFrame,對齊操做會同時發生在行和列上。


在算術方法中填充值


對運算後的NA值處填充一個特殊值(好比 0):

clipboard.png

不然 e 列都是NaN值

相似,在對SeriesDataFrame 從新索引時,也能夠指定一個填充值:

clipboard.png

用這幾個特定字的,叫算術方法:add/ sub/ div/ mul ,即:加/減/除/乘。


DataFrame 和 Series 之間的運算


計算一個二維數組與其某行之間的差:

clipboard.png

這個就叫作廣播,下面的每行都作這個運算了。

默認狀況下,DataFrameSeries之間的算術運算會將Series的索引匹配到DataFrame的列,而後沿着行一直向下廣播:

clipboard.png

獲得

clipboard.png

作加法 frame+series2,找不到的值就並集爲NaN


若是你但願匹配行,且在列上廣播,則必須使用算術運算方法:

clipboard.png

傳入的軸號就是但願匹配的軸。


函數的應用和映射


NumPyufuncs可用於操做pandas對象,以abs爲例:

clipboard.png


DataFrameapply 方法:將函數應用到各列或行所造成的一維數組上:

clipboard.png

許多最爲常見的數據統計功能都被封裝爲DataFrame的方法,無需使用apply方法。

除標量值外,傳遞給apply的函數還能夠返回由多個值組成的Series

clipboard.png

applymap 獲得frame中各個浮點值的格式化字符串:

clipboard.png

Series有一個用於應用元素級函數的 map 方法:

clipboard.png


排序和排名


sort_index方法:返回一個已排序的新對象

clipboard.png

對於DataFrame,能夠根據任意一個軸上的索引進行排序:

clipboard.png

指定了axis=1,是對列進行排序。

默認按升序,降序用ascending=False

clipboard.png

Series進行排序,可用方法sort_values()

clipboard.png

在排序時,任何缺失值默認都會被放到Series末尾。


DataFrame上,用by根據列的值進行排序:

clipboard.png

根據多個列:

clipboard.png


rank方法:默認狀況下,rank是經過「爲各組分配一個平均排名」的方式破壞平級關係的。

clipboard.png

根據值在原數據中出現的順序給出排名:

clipboard.png

按降序進行排名:

clipboard.png

DataFrame能夠在行或列上計算排名:

clipboard.png


帶有重複值的軸索引


雖然許多pandas函數都要求標籤惟一(如 reindex),但這不是強制性的。

帶有重複索引的Series

clipboard.png

索引的is_unique屬性能夠判斷它的值是否惟一。

帶有重複索引的DataFrame

clipboard.png

Pandas中, DataFrame.ix[i]DataFrame.iloc[i]均可以選取 DataFrame中第 i行的數據,那麼這兩個命令的區別在哪裏呢?

ix能夠經過行號和行標籤進行索引,而iloc只能經過行號索引,即ix能夠看作是lociloc的綜合。

clipboard.png

彙總和計算描述統計

pandas對象擁有一組經常使用的數學和統計方法:用於從Series中提取單個值,或從DataFrame的行或列中提取一個Series

Numpy數組方法相比,它們都是基於沒有缺失數據的假設而構建的。

clipboard.png

傳入 axis=1 將會按行進行求和運算:

clipboard.png

NA值會自動被排除,如 1.40+NaN=1.40, NaN+NaN=0.00

經過skipna選項能夠禁用該功能:(獲得 1.40+NaN=NaN, NaN+NaN=NaN

clipboard.png

返回間接統計(輸出了值所在的行名):

clipboard.png

累計型的(樣本值的累計和):

clipboard.png

一次性產生多個彙總統計:

clipboard.png

對於非數值型數據,describe會產生另一種彙總統計:

clipboard.png


相關係數與協方差


SeriesDataFrame

  • corr方法: 相關係數
  • cov方法:協方差

DataFramecorrwith方法:計算其列或行跟另外一個SeriesDataFrame之間的相關係數。傳入一個DataFrame計算按列名配對的相關係數,傳入axis=1便可按行進行計算。


惟一值、值計數以及成員資格


從一維Series的值中抽取信息。

unique函數:獲得Series中的惟一值數組

clipboard.png

value_counts:用於計算一個Series中各值出現的頻率:

clipboard.png

Series按降序排列。value_counts是一個頂級pandas方法,可用於任何數組或序列。

isin:用於判斷矢量化集合的成員資格,可用於選取SeriesDataFrame列中數據的子集:

clipboard.png


處理缺失數據

pandas的設計目標之一就是讓缺失數據的處理任務儘可能輕鬆。

pandas使用浮點值 NaN(Not a Number) 表示浮點和非浮點數組中的缺失數據。它只是一個便於被檢測出來的標記而已。

python 內置的None值也會被當作NA處理(如 string_data[0]=None)。


濾掉缺失數據


對於一個Series, dropna返回一個僅含非空數據和索引值的Series

clipboard.png

經過布爾型索引也能夠達到這個目的:

clipboard.png

對於DataFrame對象,dropna默認丟棄任何含有缺失值的行:

clipboard.png

丟棄全爲NA的那些行,axis=1則丟棄列:

clipboard.png

只想留下一部分參數,用thresh參數:

clipboard.png

thresh=3:保留至少 3 個非空值的行,即一行中有 3 個值是非空的就保留.


填充缺失數據


fillna方法:經過一個常數調用fillna就會將缺失值替換爲那個常數值。

clipboard.png

經過一個字典調用fillna,能夠實現對不一樣的列填充不一樣的值:

clipboard.png

fillna默認會返回新對象(副本),但也能夠對現有對象進行就地修改:

clipboard.png

插值方法(對 reindx 有效的也可用於 fillna):

clipboard.png

clipboard.png

你能夠用fillna實現許多別的功能,好比傳入Series的平均值或中位數:

clipboard.png


層次化索引

在一個軸上用多個(2 個以上)索引級別,即以低維度形式處理高維度數據。

MultiIndex 索引的 Series 的格式化輸出形式:

clipboard.png

選取數據子集:

clipboard.png

在「內層」中進行選取:

clipboard.png

層次化索引在數據重塑基於分組的操做中很重要。好比說,上面的數據能夠經過其 unstack 方法被從新安排到一個DataFrame中,它的逆運算是 stack

clipboard.png

對於一個DataFrame,每條軸均可以有分層索引:

clipboard.png

各層均可以有名字(能夠是字符串,也能夠是別的 Python 對象)。
注意⚠️不要將索引名稱軸標籤混爲一談。

clipboard.png

有了分部的列索引,能夠輕鬆選取列分組。

能夠單首創建 MultiIndex 而後複用。上面的DataFrame中的分級列能夠這樣建立:

clipboard.png


重排分級順序


從新調整某條軸上各級別的順序,或根據指定級別上的值對數據進行排序。

swaplevel:接受兩個級別編號或名稱,返回一個互換了級別的新對象,數據不發生改變:

clipboard.png

sortlevel:根據單個級別中的值對數據進行排序(獲得的最終結果是有序的)

clipboard.png


根據級別彙總統計


level選項:用於指定在某條軸上求和的級別。

以下所示,分別根據行或列上的級別來對行、對列進行求和:

clipboard.png


使用DataFrame的列


DataFrame的一個或多個列當作行索引來用,或將行索引變成DataFrame的列:

clipboard.png

set_index函數:將其一個或多個列轉換爲行索引,並建立一個新的DataFrame

默認狀況下,那些列會從DataFrame中移除,也能夠將其保留下來:

clipboard.png

reset_index:將層次化索引的級別轉移到列裏面(和 set_index 相反)

clipboard.png


不足之處,歡迎指正。

相關文章
相關標籤/搜索