1. 程式人生 > >資料分析之pandas入門

資料分析之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.DataFramedata = Noneindex = Nonecolumns = Nonedtype = Nonecopy = 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