新手在使用平台进行量化策略实现时,往往会被各种数据类型搞乱,不知道目前获取的数据是什么类型的,可以使用什么方法,所以梳理了一下。
在Python中有多种内建的数据结构,我们这里经常遇到的会有列表、字典、集合和元组,第三方库pandas还提供DataFrame和Series。将逐步详细介绍列表、字典、集合、元组、DataFrame和Series的基本使用方法和小技巧,然后介绍在使用平台获取数据时不同数据类型的转换。
首先对列表进行介绍
List(列表) 是 Python 中最通用的序列。列表是一个任意类型对象位置的相关有序集合,它没有固定大小。不像字符串,其大小是可以变的,通过对偏移量进行赋值以及其他各种列表的方法进行调用,可以修改列表大小。
In [1]:
# 定义列表LL = [1,2,3,4,5,6,7,8,9]# 使用len()函数查看列表的长度len(L)
Out[1]:
9
①列表索引:
In [2]:
print L[0]print L[-1] # 负数表示从后数第几个元素,-1即为列表的最后一个元素
1
9
②列表切片: (注意:切片并不会取到“尾下表”那个数)
In [3]:
L[1:5]
Out[3]:
[2, 3, 4, 5]
③ +操作可以拼接列表
In [4]:
L + [2,3,4]
Out[4]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4]
In [5]:
# 统计a中元素出现的次数a = [1, 2, 3, 3, 1234.5]print 'a中 1 出现的次数:',a.count(1)print 'a中 3 出现的次数:',a.count(3) print 'a中 x 出现的次数:',a.count('x')
a中 1 出现的次数: 1
a中 3 出现的次数: 2
a中 x 出现的次数: 0
In [6]:
# 在a的尾部添加元素a.append(555)a
Out[6]:
[1, 2, 3, 3, 1234.5, 555]
In [7]:
# 将[7,8,9]于a进行拼接a.extend([7,8,9])a
Out[7]:
[1, 2, 3, 3, 1234.5, 555, 7, 8, 9]
In [8]:
# 在a中第三个位置插入-1a.insert(2, -1)a
Out[8]:
[1, 2, -1, 3, 3, 1234.5, 555, 7, 8, 9]
In [9]:
# 返回2在a中的位置a.index(2)
Out[9]:
1
In [10]:
# 反向排列aa.reverse()a
Out[10]:
[9, 8, 7, 555, 1234.5, 3, 3, -1, 2, 1]
In [11]:
# 对a进行排序,默认为升序!a.sort()a
Out[11]:
[-1, 1, 2, 3, 3, 7, 8, 9, 555, 1234.5]
In [12]:
# 逆序排列aa.sort(reverse=True)a
Out[12]:
[1234.5, 555, 9, 8, 7, 3, 3, 2, 1, -1]
In [13]:
# 删除列表a中值为 3 的第一个元素a.remove(3)a
Out[13]:
[1234.5, 555, 9, 8, 7, 3, 2, 1, -1]
In [14]:
# 删除a中索引为0的元素del a[0]a
Out[14]:
[555, 9, 8, 7, 3, 2, 1, -1]
In [15]:
# 删除a中索引为 2:4 的元素del a[2:4]a
Out[15]:
[555, 9, 3, 2, 1, -1]
del 也可以删除整个变量,此后再引用命名 a 会引发错误(直到另一个值赋给它为止)。我们在后面的内容中可以看到 del 的其它用法。
In [16]:
del aa
---------------------------------------------------------------------------NameError Traceback (most recent call last)<ipython-input-16-ef9d13752aff> in <module>() 1 del a----> 2 aNameError: name 'a' is not defined
列表方法使得列表可以很方便的做为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈中。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:
In [17]:
stack = [3, 4, 5]stack.append(6)stack.append(7)stack
Out[17]:
[3, 4, 5, 6, 7]
In [18]:
stack.pop() #后进先出
Out[18]:
7
In [19]:
stack
Out[19]:
[3, 4, 5, 6]
In [20]:
print stack.pop()print stack.pop()print stack
6
5
[3, 4]
你也可以把列表当做队列使用,队列作为特定的数据结构,最先进入的元素最先释放(先进先出)。不过,列表这样用效率不高。相对来说从列表末尾添加和弹出很快;在头部插入和弹出很慢(因为为了一个元素,要移动整个列表中的所有元素)。
要实现队列,使用 collections.deque,它为在首尾两端快速插入和删除而设计。例如:
In [21]:
from collections import dequequeue = deque(["Eric", "John", "Michael"])queue.append("Terry")queue.append("Graham")queue
Out[21]:
deque(['Eric', 'John', 'Michael', 'Terry', 'Graham'])
In [22]:
print queue.popleft() # 先到的先出print queue.popleft()print queue
Eric
John
deque(['Michael', 'Terry', 'Graham'])
这一节就学到这里就结束了。