pandas核心數據結構
pandas是以numpy為基礎的,還提供了一些額外的方法
Series
series用來表示一維數據結構,與python內部的數組類似,但多了一些額外的功能。
series內部由兩個相互關聯的數組組成:主數組用來存放數組,可以是numpy中的任意數據類型;另一個數組用來存放索引,索引默認從0開始。朱數組中每個元素又有一個與之關聯的索引。
創建series對象
1、通過series的構造方法,參數為數組
通過參數index也可以指定索引
2、也可以通過傳入ndarray創建series
注意:此時修改series中元素會對原ndarray有影響
3、還可以傳入一個series對象,會返回一個新的series對象但仍指向同一地址
注意:此時修改series中的對象會對原series產生影響
4、可以傳入空類型np.NaN對象
5、傳入字典
在series的構造函數中傳入一個字典,那么字典的key則為index,value為series的values元素
series對象的屬性與方法
1、查看series的索引和值
2、series的長度
3、獲取不重復的series
通過調用series對象的unique()方法返回一個無重復元素的series
4、統計重復元素出現的次數
series對象的value_counts()會返回一個統計了元素-次數的series
5、判斷是否包含某些元素
isin()方法傳入一個條件可以判斷series是否包含某些元素,返回的是一個series
返回的布爾類型series傳給原series可以進行篩選滿足條件的元素
6、判斷元素是否為null或非null
isnull()返回一個布爾類型的series
非空即調用notnull()方法
通過isnull()方法
7、獲取最小最大值的索引
通過調用idxmin()與idxmax()
獲取內部元素
支持使用從0開始的索引訪問元素或指定索引值
同樣series也支持切片
篩選元素
可以對series對象直接進行邏輯運算,但回返回一個布爾類型的series
通過傳遞布爾類型的series可以進行篩選元素
series的運算
1、series的運算是針對values中的每一個元素的
numpy提供了許多運算方法,都可以將series傳入
2、多個series進行運算時,具有相同index的value會進行運算,若無相同idex,則該value的運算結果為NaN
DataFrame
DataFrame數據結構與關系型表格類似,是多維的series,它的"values"為colunms,即多列,每一列的數據類型可以不相同
創建DataFrame對象
1、傳遞一個字典對象給DataFrame的構造函數,dict的key為每一列的列名,value作為列元素
還可以指定字典中的部分kv對裝載到dataframe中
自然也可以自定義行標簽index
2、傳入元素數組、index數組和列名數組
獲取元素
1、通過columns屬性查看列名
2、通過index屬性查看行名
3、通過values屬性獲取元素
4、獲取某一列的內容
用列名檢索
若列名為字符串類型,可以直接通過以列名為屬性獲取
5、獲取某一行的內容
通過DataFrame.icon[index]實現
?
還可以通過行名進行索引
?
索引多行在icon后傳入列表即可
?
6、切分
同樣dataframe底層為ndarray
7、獲取某一值
需要指定兩個維度,注意列名在前
dataframe為行列起名
index和columns默認名為空
dataframe相關操作
1、添加一列
一列即為一個series,所以可以直接傳入一個series。注意series中的index需要與dataframe中的行名相同
2、判斷是否包含某元素
與series相同,可以使用isin()方法,并獲取符合條件的元素
3、刪除某列
通過del()方法
4、支持邏輯運算符進行篩選
與series相同
5、行列交換
底層為二維ndarray,即矩陣,可轉置。通過T屬性
?
Index對象
index對象在series和dataframe中都十分重要,很多操作都是針對index對象進行優化
判斷index是否唯一
通過index對象的is_unique屬性判斷
更換索引
通過series的reindex()方法可以交換原先索引位置,對于未出現過的索引名對應的元素為NaN
填充索引
若series對象中索引缺失了很多項,也可以通過reindex()來填充索引
1、method為ffill(forward fill),即向前填充。缺失的索引對應的元素為之前的第一個出現索引的值
2、bfill即backward fill,向后填充。缺失的索引對應的元素為之后的第一個出現索引的值
3、對于dataframe的reindex
同樣可以對dataframe進行填充列
bfill為向后(右)填充,ffill為向左
刪除索引
1、通過drop()方法刪除索引,并返回刪除的索引-值,會返回一個新的series
原series不會發生變化
2、dataframe中刪除索引
同樣返回一個新的dataframe
還可以刪除列,通過指定axis=1
算數和數據對齊
1、相同數據結構之間的運算
兩個series進行運算時,只有相同索引的元素才會進行運算
dataframe也是類似的,只有列名和index相同的元素才會運算
2、series和dataframe之間的與運算
實際上的df中的每一列與serise進行運算
若存在不共有的index,則該index對應的值為NaN
numpy函數應用與自定義函數
pandas是以numpy為基礎的,ufunc就是經過擴展的通用函數,這類函數能夠讀數據結構中的元素進行操作
numpy中的函數
1、例如求平方根
可以直接通過numpy中的sqrt()方法,傳入一個series或dataframe對象
2、統計函數
使用axis=0指定應用于列,axis=1指定應用于行
其他sum,max等函數皆可用
使用describe()函數可以查看所有統計量
自定義函數
自定義函數是對一維數組進行運算的,返回結構是一個數值。使用dataf或seri上的apply()方法應用自定義函數。針對每一行或每一列,使用axis=0指定應用于列,axis=1指定應用于行
1、dataframe上自定義函數求行或列的平方和
關于axis=1還是0:
2、使用lamdba表達式
series上自定義函數求平方可以直接寫lambda表達式
3、自定義函數返回series
apply函數并不一定返回一個標量,也可以是一個series
例如求dataframe中每一行或每一列的最大值和最小值
Series和DataFrame的排序和排位
Series排序
1、按index排序
通過sort_index()方法,ascending為True則為升序。默認升序
2、按元素值排序
通過sort_values()方法。默認升序
dataframe排序
1、按索引排序
同上sort_index()。ascending默認為True,axis默認為0
2、按column排序
sort_index()中聲明axis為1
3、列中按元素值排序
sort_index()中by指定需要排序的列
注意:sort_values()不支持同一行的排序
排位
排位指的是對元素值大小進行排序后返回在序列中的位置,比如從小到大排在第幾位
1、Series的排位
通過rank()
2、DataFrame的排位
為series類似,但需要指明axis,0為每列排位,1位每行排位
?
相關性和協方差
相關性correlation和協方差covariance是兩個重要的統計量,分別用corr()和cov()兩個函數表示,用來度量兩個對象的相關性。相關系數位于-1~1之間
相關系數為1:表示完全正相關
相關系統為0:表示完全不相關
相關系統為-1:表示完全正相關
這連個統計量通常涉及到兩個series對象
相關性
1、series中的相關性
2、dataframe中每一列的相關性
dataframe中的相關性一般用來比較該df中的每一列與其他列之間的相關性
調用corr()方法得到的是一個矩陣
3、dataframe與series之間的相關性
dataframe相當于多維series,通過df對ser的相關性比較,實則是df中的每一列與series的比較
通過corrwith()方法實現
4、dataframe與dataframe之間的相關性
也是通過corrwith()方法,分別比較相同列名中的元素的相關性
可以在dataframe分別取出series互相比較
?
NaN的數據處理
1、創建NaN數據
在構造數據時,可以直接賦值NaN,即調用numpy的nan
構造series過程中為series的值賦值為nan
也可以None來賦值
2、刪除NaN數據
若NaN在整個數據集中占比較小,可考慮直接刪除
通過dropna()實現
在dataframe中需要指明axis,會刪除含有NaN數據的一整行或一整列
還可以設置刪除策略,在dropna()函數中how為'all'是整行或整列全為NaN時才會刪除。默認為'any'
3、判斷為空或非空
但最好在副本上進行刪除,通過notnull()可以返回索引對應值是否為空的布爾類型series
判斷為空則調用isnull(),可以篩選出為NaN的數據
4、填充空值
1、通過fillna()實現,傳入參數表示填的值
2、還可以在fillna()中傳入字典指定列名與填充值