Python数据处理的瑞士军刀:pandas
####第一篇:基本数据结构介绍
####一、Pandas介绍
终于写到了作者最想介绍,同时也是Python在数据处理方面功能最为强大的扩展模块了。在处理实际的金融数据时,一个条数据通常包含了多种类型的数据,例如,股票的代码是字符串,收盘价是浮点型,而成交量是整型等。在C++中可以实现为一个给定结构体作为单元的容器,如向量(vector,C++中的特定数据结构)。在Python中,pandas包含了高级的数据结构Series和DataFrame,使得在Python中处理数据变得非常方便、快速和简单。
pandas不同的版本之间存在一些不兼容性,为此,我们需要清楚使用的是哪一个版本的pandas。现在我们就查看一下量化实验室的pandas版本:
1
import pandas as pd
2
pd.__version__
'0.14.1'
pandas主要的两个数据结构是Series和DataFrame,随后两节将介绍如何由其他类型的数据结构得到这两种数据结构,或者自行创建这两种数据结构,我们先导入它们以及相关模块:
1
import numpy as np
2
from pandas import Series, DataFrame
####二、Pandas数据结构:Series
从一般意义上来讲,Series可以简单地被认为是一维的数组。Series和一维数组最主要的区别在于Series类型具有索引(index),可以和另一个编程中常见的数据结构哈希(Hash)联系起来。
#####2.1 创建Series
创建一个Series的基本格式是s = Series(data, index=index, name=name),以下给出几个创建Series的例子。首先我们从数组创建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
可以在创建Series时添加index,并可使用Series.index查看具体的index。需要注意的一点是,当从数组创建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')
创建Series的另一个可选项是name,可指定Series的名称,可用Series.name访问。在随后的DataFrame中,每一列的列名在该列被单独取出来时就成了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