天天看點

pandas基礎教程

pandas簡介

pandas資料結構介紹

Series

Series類型的建立

1.通過一維數組建立Series

2.通過字典的方式建立Series

3.标量值,index表達Series類型的尺寸

Series切片和索引

Series應用NumPy數組運算

Series類型的操作類似Python字典類型

Series缺失值檢測

Series自動對齊

Series及其索引的name屬性

DataFrame

DataFrame類型的建立

1.二維ndarray對象

2.通過清單的方式建立DataFrame

3.通過字典的方式建立DataFrame

DataFrame的基本屬性和整體情況查詢

DataFrame的索引

1.df.loc 通過**标簽**索引行資料

2.df.iloc 通過**位置**擷取行資料

3.布爾索引

階層化索引

Series階層化索引

DataFrame階層化索引

按層級統計資料

資料的合并

分割群組合

pandas之讀寫資料

1.read_csv()或read_table()從文本檔案讀入資料

2.to_csv()寫入資料

缺失資料的處理

資料特征分析

1.排序

2.基本統計函數

3.累計統計函數

4.相關性分析

pandas是python的一個資料分析包,最初由AQR Capital Management于2008年4月開發,并于2009年底開源出來,目前由專注于Python資料包開發的PyData開發team繼續開發和維護,屬于PyData項目的一部分。Pandas最初被作為金融資料分析工具而開發出來,是以,pandas為時間序列分析提供了很好的支援。

Pandas的名稱來自于面闆資料(panel data)和python資料分析(data analysis)。panel data是經濟學中關于多元資料集的一個術語,在Pandas中也提供了panel的資料類型。

官網:http://pandas.pydata.org/

參考文檔:http://pandas.pydata.org/pandas-docs/stable/

Series:一種類似于一維數組的對象,它是由一組資料(各種Numpy資料類型)以及一組與之相關的資料标簽(即索引)組成。僅由一組資料即可産生簡單的Series。

DataFrame:一個表格型的資料結構,含有一組有序的列,每列可以是不同的值類型(數值、字元串、布爾值等),DataFrame既有行索引也有列索引,可以被看做是由Series組成的字典。

• 通過一維數組建立Series

• Python字典,鍵值對中的“鍵”是索引,index從字典中進行選擇操作

• 标量值,index表達Series類型的尺寸

• Python清單,index與清單元素個數一緻

• 其他函數,range()函數等

Series對象本質上是由兩個數組構成,一個數組構成對象的鍵(index,索引),一個數組構成對象的值(values)

切片:可以通過自定義索引的清單進行切片;可以通過自動索引進行切片,如果存在自定義索引,則一同被切片。

索引分為自動索引(序号)和自定義索引(index)。

索引:一個的時候直接傳入序号或者index,多個的時候傳入序号或者index的清單,也可以使用reindex()函數。

NumPy中運算和操作可用于Series類型。

• 通過自定義索引通路

• 保留字in操作

• 使用.get()方法

pandas中的isnull和notnull函數

pandas中的isnull和notnull函數可用于Series缺失值檢測。

isnull和notnull都傳回一個布爾類型的Series。

不同Series之間進行算術運算,會自動對齊不同索引的資料。

Series對象本身及其索引都有一個name屬性,可指派設定。

DataFrame對象既有行索引,又有列索引行索引,表明不同行,橫向索引,叫index,0軸,axis=0

列索引,表名不同列,縱向索引,叫columns,1軸,axis=1

DataFrame索引

• 二維ndarray對象

• 由一維ndarray、清單、字典、元組或Series構成的字典

• Series類型

• 其他的DataFrame類型

pandas基礎教程

df.loc 通過标簽索引行資料

df.iloc 通過位置擷取行資料

布爾索引

1.df.loc 通過标簽索引行資料

2.df.iloc 通過位置擷取行資料

指派更改資料:

假設要從資料中查找名字字元串長度大于3且分數大于98的人

注意兩個問題:

&表示且;|表示或

字元串的方法

pandas基礎教程

在某個方向上擁有多個(兩個及兩個以上)索引級别

通過階層化索引,pandas能夠以低次元形式處理高次元資料

通過階層化索引,可以按層級統計資料

join:預設情況下是把行索引相同的資料合并到一起。

merge:按照指定的列把資料按照一定的方式合并到一起。

一個經典分割 - 應用 - 組合操作示例如圖 所示,其中“apply”的是一個求和函數。

分割步驟将 DataFrame 按照指定的鍵分割成若幹組。

應用步驟對每個組應用函數,通常是累計、轉換或過濾函數。

組合步驟将每一組的結果合并成一個輸出數組。

pandas基礎教程

DataFrameGroupBy對象常用的函數:

函數名

說明

.count()

統計非nan值的數量

.sum()

非nan值的和

.mean()

非nan值的平均數

.median()

非nan值的中位數

.std()、.var()

無偏(n-1)标準差和方差

.min() .max()

非nan值的最小值和最大值

讀取資料的函數

read_csv()

從檔案、url、檔案型對象中加載帶分隔符的資料,預設為’ , '。

read_table()

從檔案、url、檔案型對象中加載帶分隔符的資料,預設為’\t’。

read_excel()

從 Excel 檔案讀入資料

read_hdf()

使用 HDF5 檔案讀寫資料

read_sql()

從 SQL 資料庫的査詢結果載入資料

read_pickle()

讀入 Pickle 序列化之後的資料

其中read_csv和read_table是常用的,下面就介紹一下read_csv或read_table如何讀取資料。

pandas.read_csv() 報錯 OSError: Initializing from file failed,一般由兩種情況引起:一種是函數參數為路徑而非檔案名稱,另一種是函數參數帶有中文。

對于第一種情況很簡單,原因就是沒有把檔案名稱放到路徑的後面,把檔案名稱添加到路徑後面就可以了。。

第二種情況,即使路徑、檔案名都完整,還是報錯的原因是這個參數中有中文,發現調用pandas的read_csv()方法時,預設使用 C engine作為parser engine,而當檔案名中含有中文的時候,用C engine在部分情況下就會出錯。是以在調用read_csv()方法時指定engine為Python就可以解決問題了。

pandas基礎教程

資料缺失通常有兩種情況:

一種就是空,None等,在pandas是NaN(和np.nan一樣)。

另一種是我們讓其為0,藍色框中。

方法

.dropna()

根據标簽的值中是否存在缺失資料對軸标簽進行過濾(删除),可通過門檻值調節對缺失值的容忍度

.fillna()

用指定值或插值方法填充缺失資料

.isnull()

傳回一個含有布爾值的對象,這些布爾值表示哪些值是缺失值NA

.notnull()

isnull的否定式

在pandas中資料缺失處理方法:

判斷資料是否為NaN:pd.isnull(df),pd.notnull(df)

處理方式1:删除NaN所在的行列dropna (axis=0, how=‘any’, inplace=False)

處理方式2:填充資料,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)

處理為0的資料:t[t==0]=np.nan

注意:當然并不是每次為0的資料都需要處理;計算平均值等情況,nan是不參與計算的,但是0會。

排序

基本統計函數

累計統計函數

相關性分析

索引排序

.sort_index()方法在指定軸上根據索引進行排序,預設升序

.sort_index(axis=0, ascending=True)

鍵值排序

.sort_values()方法在指定軸上根據數值進行排序,預設升序

Series.sort_values(axis=0, ascending=True)

DataFrame.sort_values(by, axis=0, ascending=True)

by : axis軸上的某個索引或索引清單

注意:若按照鍵值排序中出現NaN,無論升序或者降序排列,統一放到排序末尾。

适用于Series和DataFrame類型

計算資料的總和,按0軸計算,下同

非NaN值的數量

.mean() .median()

計算資料的算術平均值、算術中位數

.var() .std()

計算資料的方差、标準差

計算資料的最小值、最大值

.prod()

.describe()

針對0軸(各列)的統計彙總

适用于Series類型

.argmin() .argmax()

計算資料最大值、最小值所在位置的索引位置(自動索引)

.idxmin() .idxmax()

計算資料最大值、最小值所在位置的索引(自定義索引)

适用于Series和DataFrame類型,累計計算

.cumsum()

依次給出前1、2、…、n個數的和

.cumprod()

依次給出前1、2、…、n個數的積

.cummax()

依次給出前1、2、…、n個數的最大值

.cummin()

依次給出前1、2、…、n個數的最小值

适用于Series和DataFrame類型,滾動計算(視窗計算)

.rolling(w).sum()

依次計算相鄰w個元素的和

.rolling(w).mean()

依次計算相鄰w個元素的算術平均值

.rolling(w).var()

依次計算相鄰w個元素的方差

.rolling(w).std()

依次計算相鄰w個元素的标準差

.rolling(w).min() .max()

依次計算相鄰w個元素的最小值和最大值

兩個事物,表示為X和Y,如何判斷它們之間的存在相關性?

X增大,Y增大,兩個變量正相關;X增大,Y減小,兩個變量負相關;X增大,Y無視,兩個變量不相關。

協方差:

cov ⁡ ( X , Y ) = ∑ i = 1 n ( X i − X ‾ ) ( Y i − Y ‾ ) n − 1 \operatorname{cov}(X, Y)=\frac{\sum_{i=1}^{n}\left(X_{i}-\overline{X}\right)\left(Y_{i}-\overline{Y}\right)}{n-1} cov(X,Y)=n−1∑i=1n​(Xi​−X)(Yi​−Y)​

r = ∑ i = 1 n ( x i − x ‾ ) ( y i − y ‾ ) ∑ i = 1 n ( x i − x ‾ ) 2 ∑ i = 1 n ( y i − y ‾ ) 2 r=\frac{\sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)\left(y_{i}-\overline{y}\right)}{\sqrt{\sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)^{2}} \sqrt{\sum_{i=1}^{n}\left(y_{i}-\overline{y}\right)^{2}}} r=∑i=1n​(xi​−x)2 ​∑i=1n​(yi​−y​)2 ​∑i=1n​(xi​−x)(yi​−y​)​

​ r取值範圍[‐1,1]

​ 0.8‐1.0 極強相關;0.6‐0.8 強相關; 0.4‐0.6 中等程度相關; 0.2‐0.4 弱相關; 0.0‐0.2 極弱相關或無相關。

​ 相關分析函數适用于Series和DataFrame類型

.cov()

計算協方差矩陣

.corr()

計算相關系數矩陣, Pearson、Spearman、Kendall等系數

參考資料:

書籍:

《python資料科學手冊》

《利用python進行資料分析》

《python科學計算》

視訊:

《黑馬程式員之資料分析》

《python資料分析與展示》