1.Numpy之array用法
ndarray:N维数组对象(矩阵),所有元素必须是相同类型。
ndarray属性:ndim属性,表示维度个数;shape属性,表示各维度大小;dtype属性,表示数据类型。
创建ndarray数组
from numpy import *
a1 = [0,1,2,3,4,5] #一维数组
a2 = [[0,1,2,3,4], [5,6,7,8,9]] #二维数组
a3 = [[[0,1,2,3], [4,5,6,7], [8,9,10,11]], [[12,13,14,15], [16,17,18,19], [20,21,22,23]]] #三位数组
#创建向量
v1 = array(a1) #一维向量
v2 = array(a2) #二维向量
v3 = array(a3) #三维向量
dims1 = v1.ndim
dims2 = v2.ndim
dims3 = v3.ndim
sh30 = v3.shape[0]
sh31 = v3.shape[1]
sh32 = v3.shape[2]
type3 = v3.dtype
print('向量v3的数据类型是',type3)
2.数组的增删
#增
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> b = np.array([[10,20],[30,40],[50,60]])
>>> np.vstack((a,b))
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[10, 20],
[30, 40],
[50, 60]])
>>> np.hstack((a,b))
array([[ 1, 2, 10, 20],
[ 3, 4, 30, 40],
[ 5, 6, 50, 60]])
#删
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> np.delete(a,1,axis = 0)#删除a的第二行。
array([[1, 2],
[5, 6]])
>>> np.delete(a,(1,2),0)#删除a的第二,三行。
array([[1, 2]])
>>> np.delete(a,1,axis = 1)#删除a的第二列。
array([[1],
[3],
[5]])
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> np.hsplit(a,2)#水平分割(搞不懂,明明是垂直分割嘛?)
[array([[1],
[3],
[5]]), array([[2],
[4],
[6]])]
>>> np.split(a,2,axis = 1)#与np.hsplit(a,2)效果一样。
>>> np.vsplit(a,3)
[array([[1, 2]]), array([[3, 4]]), array([[5, 6]])]
>>> np.split(a,3,axis = 0)#与np.vsplit(a,3)效果一样。
3.不同数据对象的转换
Array
多维数组的操作也非常简单,可以参考list类型对数组进行访问、切片操作。比较重要的是可以通过shape属性获取数组的维数。
我们也可以通过多维数组来标识异构的数据类型,以股票数据为例,通过dtype类来定义数据类型对象stock, 其包括日期、开盘价、收盘价、最高价、最低价、成交量及股票编码信息
from numpy import *
if __name__ == '__main__':
stock = dtype([('date', str_, 10), ('open', float32), ('close', float32),
('high', float32), ('low', float32), ('volume', float32),
('code', float32)])
data = array([("2017-10-18", 11.53, 11.69, 11.70, 11.51, 871365.0, "000001"),
("2017-10-19", 11.64, 11.63, 11.72, 11.57, 722764.0, "000001"),
("2017-10-20", 11.59, 11.48, 11.59, 11.41, 461808.0, "000001"),
("2017-10-23", 11.39, 11.19, 11.40, 11.15, 1074465.0, "000001")],
dtype=stock)
print type(data)
print data
DataFrame
DataFrame 是将数个 Series 按列合并而成的二维数据结构,每一列单独取出来是一个 Series ,这和SQL数据库中取出的数据是很类似的。as_matrix()方法可以指定获取的列;values属性将使用所有的列转换为ndarray对象,等同与无参数的as_matrix();array()接受将DataFrame对象作为参数创建ndarray对象。
from pandas import Series, DataFrame
from numpy import array
if __name__ == '__main__':
data = [
[11.53, 11.69, 11.70, 11.51, 871365.0, 000001],
[11.64, 11.63, 11.72, 11.57, 722764.0, 000001],
[11.59, 11.48, 11.59, 11.41, 461808.0, 000001],
[11.39, 11.19, 11.40, 11.15, 1074465.0, 000001]]
df = DataFrame(data, index=["2017-10-18", "2017-10-19", "2017-10-20", "2017-10-23"],
columns=["open", "close", "high", "low", "volume", "code"])
print df
print df.as_matrix(['open', 'close'])
print df.values
print array(df)
Series
Series 可以简单地被认为是一维的数组。 Series 和一维数组最主要的区别在于 Series 类型具有索引( index ),可以调用as_matrix()将其转换为ndarray类型的对象。
from pandas import Series
if __name__ == '__main__':
data = [
["2017-10-18", 11.53, 11.69, 11.70, 11.51, 871365.0, 000001],
["2017-10-19", 11.64, 11.63, 11.72, 11.57, 722764.0, 000001],
["2017-10-20", 11.59, 11.48, 11.59, 11.41, 461808.0, 000001],
["2017-10-23", 11.39, 11.19, 11.40, 11.15, 1074465.0, 000001]]
series = Series(data, index=['a', 'b', 'c', 'd'])
print series
#将Series转换为ndarray类型
arr = series.as_matrix()
其他
import numpy as np
import pandas as pd
########### Series ###########
Series <--> DataFrame
*dataframe* = pd.DataFrame({"XXX1":*series1*,"XXX2":*series2*})
*series* = *dataframe*[0] #无标签时
*series* = *dataframe*["XXX"] #有标签时
Serise <--> ndarray
*series* = pd.Series(*ndarray*) #这里的ndarray是1维的
*ndarray* = np.array(*series*)
*ndarray* = *series*.values
Series <--> list
*series* = pd.Series(*list*)
*list* = *series*.tolist()
*list* = list(*series*)
########### DataFrame ###########
DataFrame <--> ndarray
*ndarray* = *dataframe*.values
*dataframe* = pd.DataFrame(*ndarray*)
DataFrame <--> list
*list* = *dataframe*.values.tolist()
*dataframe* = pd.DataFrame(*list*)
DataFrame <--> dict
*dataframe* = pd.DataFrame.from_dict({0:*dict1*, 1:*dict2*})
*dict* = *dataframe*.to_dict()
########### 其它 list ###########
dict --> list
*list* = *dict*.values() # list of values
*list* = *dict*.keys() # list of keys
*list* = list(*dict*) # list of keys
ndarray <--> list
*list* = *ndarray*.tolist()
*ndarray* = np.array(*list*)
tuple <--> list
*list* = list(*tuple*)
*tuple* = tuple(*list*)