python 数据处理——Numpy

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*)

猜你喜欢

转载自blog.csdn.net/qq_34706955/article/details/81287196