Python股票数据处理的一些代码细节
Numpy和Pandas相关
Numpy和Pandas比较
Pandas和Numpy各有所长。
在处理股票数据的基础阶段,Pandas能够清晰地展示股票代码、交易日期、价格等信息,且对于信息的分类、归集、整理有很多针对性强的功能函数,非常便捷。
在处理股票数据的高级阶段,尤其在涉及机器学习领域,Numpy用处更多。首先因为Keras等函数库要求的输入类型多为numpy.ndarray,更深层的原因是Numpy在多维数据储存和处理上更具优势,而且由于Numpy的数据为单一类型,处理速度比Pandas快很多。
numpy.ndarray和多类型数据
由于numpy.ndarray要求存储单一类型数据,用np.array()函数转换DataFrame时,如果value有多种数据类型,比如string、int、float,转换后dtype(数据表中的元素类型)会显示为object(不是很懂这是什么东西),虽然单独提取时,会“还原”为string、int或float(datatime会被转换为int),但接下来对整块数据操作时,比如遇到要求float数据类型,必须先用astype(float)进行转换,否则会报错。
i_str = [['a', 'b', 'c']]
i_int = [[1, 2, 3]]
i_float = [[1.1, 2.2, 3.3]]
i_array = np.concatenate((i_str, i_int, i_float), axis = 0)
print(i_array)
[['a' 'b' 'c']
['1' '2' '3']
['1.1' '2.2' '3.3']]
print(i_array.dtype)
output: <U32
a = i_array[0,1]
b = i_array[1,1]
c = i_array[2,1]
d = c.astype(float)
print(type(a))
output: <class 'numpy.str_'>
print(type(b))
output: <class 'numpy.str_'>
print(type(c))
output: <class 'numpy.str_'>
print(type(d))
output: <class 'numpy.float64'>
还是由于存储单一类型数据的限制,可以对提取的元素单独进行类型转换,但对整块元素进行类型转换是行不通的。
i_array[1:,:] = i_array[1:,:].astype(float)
print(i_array)
[['a' 'b' 'c']
['1.0' '2.0' '3.0']
['1.1' '2.2' '3.3']]
转换后由于有第一行string类型的限制,二、三行在被转换成float后,又被转换回string了。
Numpy神奇的取值方法
不同于DataFrame,numpy.ndarray本身是没有索引的,但它的索引方式相当灵活。
比如,以长度相同的,元素为布尔值的numpy.ndarray作为索引。
y = np.array([1, 2, 3, 4, 5])
z = np.array([False,False,False,True,True])
x = y[z]
print(x)
output: [4 5]
再此基础上,又可以用各种方法生成这种布尔值索引,比如以下:
y = np.array([1, 2, 3