Python數(shù)據(jù)處理的瑞士軍刀:pandas
####第一篇:基本數(shù)據(jù)結(jié)構(gòu)介紹
####一、Pandas介紹
終于寫到了作者最想介紹,同時也是Python在數(shù)據(jù)處理方面功能最為強(qiáng)大的擴(kuò)展模塊了。在處理實(shí)際的金融數(shù)據(jù)時,一個條數(shù)據(jù)通常包含了多種類型的數(shù)據(jù),例如,股票的代碼是字符串,收盤價是浮點(diǎn)型,而成交量是整型等。在C++中可以實(shí)現(xiàn)為一個給定結(jié)構(gòu)體作為單元的容器,如向量(vector,C++中的特定數(shù)據(jù)結(jié)構(gòu))。在Python中,pandas包含了高級的數(shù)據(jù)結(jié)構(gòu)Series和DataFrame,使得在Python中處理數(shù)據(jù)變得非常方便、快速和簡單。
pandas不同的版本之間存在一些不兼容性,為此,我們需要清楚使用的是哪一個版本的pandas,F(xiàn)在我們就查看一下量化實(shí)驗(yàn)室的pandas版本:
1
import pandas as pd
2
pd.__version__
'0.14.1'
pandas主要的兩個數(shù)據(jù)結(jié)構(gòu)是Series和DataFrame,隨后兩節(jié)將介紹如何由其他類型的數(shù)據(jù)結(jié)構(gòu)得到這兩種數(shù)據(jù)結(jié)構(gòu),或者自行創(chuàng)建這兩種數(shù)據(jù)結(jié)構(gòu),我們先導(dǎo)入它們以及相關(guān)模塊:
1
import numpy as np
2
from pandas import Series, DataFrame
####二、Pandas數(shù)據(jù)結(jié)構(gòu):Series
從一般意義上來講,Series可以簡單地被認(rèn)為是一維的數(shù)組。Series和一維數(shù)組最主要的區(qū)別在于Series類型具有索引(index),可以和另一個編程中常見的數(shù)據(jù)結(jié)構(gòu)哈希(Hash)聯(lián)系起來。
#####2.1 創(chuàng)建Series
創(chuàng)建一個Series的基本格式是s = Series(data, index=index, name=name),以下給出幾個創(chuàng)建Series的例子。首先我們從數(shù)組創(chuàng)建Series:
1
a = np.random.randn(5)
2
print "a is an array:"
3
print a
4
s = Series(a)
5
print "s is a Series:"
6
print s
a is an array:
[-1.24962807 -0.85316907 0.13032511 -0.19088881 0.40475505]s is a Series:0 -1.2496281 -0.8531692 0.1303253 -0.1908894 0.404755dtype: float64
可以在創(chuàng)建Series時添加index,并可使用Series.index查看具體的index。需要注意的一點(diǎn)是,當(dāng)從數(shù)組創(chuàng)建Series時,若指定index,那么index長度要和data的長度一致:
1
s = Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
2
print s
3
s.index
a 0.509906b -0.764549c 0.919338d -0.084712e 1.896407dtype: float64
Index([u'a', u'b', u'c', u'd', u'e'], dtype='object')
創(chuàng)建Series的另一個可選項(xiàng)是name,可指定Series的名稱,可用Series.name訪問。在隨后的DataFrame中,每一列的列名在該列被單獨(dú)取出來時就成了Series的名稱:
1
s = Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'], name='my_series')
2
print s
3
print s.name
a -1.898245b 0.172835c 0.779262d 0.289468e -0.947995Name: my_series, dtype: float64
my_series