資料分析之pandas入門
概念
Python Data Analysis Library 或 pandas 是基於NumPy 的一種工具,該工具是為了解決資料分析任務而建立的。Pandas 納入了大量庫和一些標準的資料模型,提供了高效地操作大型資料集所需的工具。pandas提供了大量能使我們快速便捷地處理資料的函式和方法。你很快就會發現,它是使Python成為強大而高效的資料分析環境的重要因素之一。
Pandas 是python的一個數據分析包,最初由AQR Capital Management於2008年4月開發,並於2009年底開源出來,目前由專注於Python資料包開發的PyData開發team繼續開發和維護,屬於PyData專案的一部分。Pandas最初被作為金融資料分析工具而開發出來,因此,pandas為時間序列分析提供了很好的支援。 Pandas的名稱來自於面板資料(panel data)和python資料分析(data analysis)。panel data是經濟學中關於多維資料集的一個術語,在Pandas中也提供了panel的資料型別。
資料結構
Series
一維陣列,與Numpy中的一維array類似。二者與Python基本的資料結構List也很相近。Series如今能儲存不同種資料型別,字串、boolean值、數字等都能儲存在Series中。相當於excel表格中的一行或一列。
Time- Series
以時間為索引的Series。
DataFrame
二維的表格型資料結構。很多功能與R中的data.frame類似。可以將DataFrame理解為Series的容器。以下的內容主要以DataFrame為主。想當於整個excel表格
Panel
三維的陣列,可以理解為DataFrame的容器。
DataFrame
pandas.
DataFrame
(data = None,index = None,columns = None,dtype = None,copy = False )
具有標記軸(行和列)的二維大小可變,可能異構的表格資料結構。算術運算在行標籤和列標籤上對齊。可以被認為是Series物件的類似dict的容器。主要的熊貓資料結構。
引數 | 含義 |
date | numpy ndarray(結構化或同類),dict或DataFrame Dict可以包含Series,陣列,常量或類似列表的物件 |
index | 索引或類似陣列 用於結果框架的索引。如果沒有索引資訊部分輸入資料且沒有提供索引,則預設為RangeIndex |
columns | 索引或類似陣列 |
dtype | dtype,預設無 要強制的資料型別。只允許一個dtype。如果沒有,推斷 |
copy | 從輸入中複製資料。僅影響DataFrame / 2d ndarray輸入 |
1.首先是引入 pandas 和 numpy,這是經常配合使用的兩個包,pandas 依賴 於 numpy , 引 入 以 後 我 們 可 以 直 接 使 用 np/pd 來 表 示 這 個 兩 個 模 塊
import pandas as pd
import numpy as np
2.先建立一個時間索引,所謂的索引(index)就是每一行資料的 id,可以標識每一行的唯一值
import numpy as np
import pandas as pd
dates=pd.date_range('20140729',periods=6) #先建立一個時間索引
print(dates)
3.為了快速入門,我們看一下如何建立一個 6X4 的資料:randn 函式用於建立 隨機數,引數表示行數和列數,dates 是上一步建立的索引列
df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print(df)
A B C D
2014-07-29 0.903144 -0.181279 -1.137720 2.223796
2014-07-30 -0.114200 -0.632093 -0.452454 0.636597
2014-07-31 1.927723 -0.144461 0.314994 0.720999
2014-08-01 0.476361 -2.103184 0.405894 0.581166
2014-08-02 -1.456755 -0.932630 -1.250263 0.707323
2014-08-03 -0.442297 0.043270 -0.712352 0.771850
4.我們還可以使用字典來建立資料框,如下建立一個列名為A的資料框,索引是自動建立的整數
df2=pd.DataFrame({'A':np.random.randn(6),})
print(df2)
A
0 -0.534755
1 0.057653
2 0.999872
3 -0.591066
4 -0.604836
5 1.942535
5.如果字典內的長度不同,以最長的資料為準,比如B列有4行,如下所示:
df3=pd.DataFrame({'A':pd.Timestamp('20140729'),'B':pd.Series(1,index=list(range(4))),})
print(df3)
6.使用dtypes來檢視各行的資料格式
df3=pd.DataFrame({'A':pd.Timestamp('20140729'),'B':pd.Series(1,index=list(range(4))),})
print(df3)
print(df3.dtypes)
A datetime64[ns]
B int64
dtype: object
7.使用head檢視前幾行的資料,檢視前3行資料
print(df3.head(3))
A B
0 2014-07-29 1
1 2014-07-29 1
2 2014-07-29 1
8.使用tail檢視後5行資料
print(df3.tail(3))
A B
1 2014-07-29 1
2 2014-07-29 1
3 2014-07-29 1
9.檢視資料框的索引
print(df.index)
Index(['A', 'B', 'C', 'D'], dtype='object')
10.檢視資料框的列名
print(df.columns)
11.檢視資料值,用values
print(df.values)
12.檢視描述性統計,用describe
print(df.describe())
13.使用T來轉置資料,也可用來行列轉換
print(df.T)
14.對資料進行了排序,用sort,引數可以指定哪一列來排序
print(df.sort_values(by="C"))
15.對單列進行操作
print(df['A'])
16.切片操作
選取1-2行
print(df[1:3])
選取“20140729”和“20140730"兩行
print(df[“20140729”;"20140730"])
17.DateFrame的loc方法是幫助選擇資料的,比如選擇索引位置為0的一行資料(我們使用dates為索引)
print(df.loc[dates[0]])
18.選擇多行資料的寫法
print(df.loc[:,['A','B']])
19.選擇區域性區域
print(df.loc['20140729':'20140730',['A','B']])
20.選擇一個數據
print(df.at[dates[0],'A'])
DateFrame的切片操作
DateFrame資料框允許我們使用iloc方法來操作array(陣列)一樣對DateFrame進行切片操作
1.提取第四行資料
print(df.iloc[3])
A 0.971871
B -1.754257
C 0.353075
D 0.040768
2.返回4-5行,1-2列資料如下面用法
print(df.iloc[3:5,0:2])
A B
3 0.971871 -1.754257
4 0.282643 -0.622204
3.返回1.2.4行,1-2列
print(df.iloc[[1,2,4],[0,2]])
A C
1 -1.344699 2.025082
2 -0.204610 -0.367524
4 0.282643 0.131546
DateFrame篩選
1.篩選D列中大於0的行,
print(df[df.D>0])
A B C D
0 -0.192291 -0.078935 0.856357 1.988780
2 -1.850391 -0.623199 -0.070384 0.346600
3 -0.539915 0.881186 0.173343 1.709659
2.篩選D列大於0,C列小於0的行
print(df[(df.D>0) &(df.C<0)])
A B C D
2 -1.850391 -0.623199 -0.070384 0.3466
3.只需要A,B列,C,D列都是用來篩選的
print(df[['A','B']][(df.D>0) &(df.C<0)])
A B
2 -1.850391 -0.623199
4.使用isin方法來篩選特定的值,把要把篩選的值寫到一個列表裡,如alist
alist=[ 0.047038 ,-0.191705 , 0.449810]
print(df['D'].isin(alist))
0 False
1 False
2 False
3 False
4 False
5 False