Numpy
import numpy as np
import matplotlib.pyplot as plt
数组属性
array.shape # 数组形状
array.ndim # 数组维数
array.size # 数组元素数量
array.itemsize # 数组元素的长度(字节)
array.dtype # 数组元素的类型
生成数组
a=np.array([[2,4,3],[75,4,36]])
# 从现有数组创建
a1=np.array(a)
# 相当于索引的形式,并没有真正的创建一个新的
a2=np.asarray(a)
# 三维数组
a1=np.array([[[1,2,3],[4,5,6],[56,465,4]],[[4,45,45],[-1,-22,6],[6,3,4]]])
# 开始,结束,生成数量
np.linspace(0,90,10)
# 开始,结束,步长
np.arange(10,50,2)
# 均值为0,标准差为1的4行5列正态分布数据
stock_change=np.random.normal(0,1,(4,5))
通用操作
# 三维数组
a1=np.array([[[1,2,3],[4,5,6],[56,465,4]],[[4,45,45],[-1,-22,6],[6,3,4]]])
a1[1,1] # array([ -1, -22, 6])
a1[1,2,0] # 6
stock_change.shape # 查看形状
stock_change.reshape([5,4]) # 5行4列,返回一个新的对象,并不改变数组本身的形状
stock_change.reshape([-1,2]) # 不知多少行,2列
stock_change.resize(10,2) # 改变数组本身的形状
stock_change.T # 转置,并不改变数组本身
array运算
np.unique(temp) # 去重
np.all(score[0:2,:]>60) # 所有的都>60 ? False
np.any(score[0:2,:]>60) # 存在一个>60 ? True
np.where(temp>60,1,0) # 大于60的置为1,否则为0
np.where(np.logical_and(temp>80,temp<90),1,0) # >80并且<90 为1,其他为0
np.where(np.logical_or(temp>80,temp<60),1,0) # 或
np.mean(temp)
np.max(temp)
np.argmax(temp) # 最大值下标
np.max(temp,axis=0) # 每一列最大值
np.argmax(temp,axis=0) # 每一列最大值的下标
矩阵运算
np.dot(a,b) # 矩阵相乘
Pandas
概述
Pandas中一共有两种数据结构,分别为:Series、DataFrame,其中Series是一维数据结构,DataFrame是二维的表格型数据结构
Series类似于一维数组,由数据和与之相关的索引构成
import numpy as np
import pandas as pd
# 默认索引
pd.Series(np.arange(10))
# 指定索引
pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5])
color_count = pd.Series({'red':100, 'blue':200, 'green': 500, 'yellow':1000})
color_count.index
color_count.values
DataFrame是一个类似于二维数组的对象,既有行索引,又有列索引
score = np.random.randint(40, 100, (10, 5))
score_df = pd.DataFrame(score)
subjects = ["语文", "数学", "英语", "政治", "体育"]
stu = ['同学' + str(i) for i in range(score_df.shape[0])]
data = pd.DataFrame(score, columns=subjects, index=stu) # 添加索引
data.shape
data.index
data.columns
data.values
data.T
data.head(5)
data.tail(5)
# 修改索引
stu = ["学生_" + str(i) for i in range(score_df.shape[0])]
data.index = stu # 必须整体全部修改,单独修改报错
# 以某一列为新的索引
df = pd.DataFrame({'month': [1, 4, 7, 10],'year': [2012, 2014, 2013, 2014],'sale':[55, 40, 84, 31]})
df1 = df.set_index('month')
df2 = df.set_index(['year', 'month'])
df3 = df.set_index(['year', 'month'],drop=False) # 不删除原来的列,默认删除True
基本操作
data = pd.read_csv("./stock_day.csv")
data = data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"], axis=1)
# 索引
data['open']['2018-02-27'] # 只能先列后行
data.loc['2018-02-27':'2018-02-22', 'open'] # 通过索引名字获取
data.iloc[:3, :5] # 通过索引下标获取
data.loc[data.index[0:4], ['open', 'close', 'high', 'low']]
# 赋值
data['close'] = 1
# 排序
# DataFrame排序
data.sort_values(by="open", ascending=True).head() # 默认升序
data.sort_values(by=['open', 'high'])
data.sort_index() # 对索引进行排序
# Series排序
data['p_change'].sort_index().head()
data['p_change'].sort_values(ascending=True).head()
DataFrame运算
data['open'].add(1)
data.query("open<24 & open>23").head()
data[data["open"].isin([23.53, 23.85])]
data.describe() # 计算平均值、标准差、最大值、最小值
data.max(0) # 0代表列求结果,1代表行求统计结果
data.var(0) # 方差
data.std(0) # 标准差
data.median()
data.idxmax(axis=0) # 最大值的位置
data.idxmin(axis=0) # 最小值的位置
data = data.sort_index()
stock_rise = data['p_change']
stock_rise.cummin() # 前n个数累计最小值
stock_rise.cumsum() # 前n个数累计求和
stock_rise.cumprod() # 前n个数累计乘积
文件读取与存储
# CSV
pd.read_csv('./test1.csv')
data[:10].to_csv("./test1.csv", columns=['open'],index=False)
# HDF
day_close=pd.read_hdf("./day_close.h5")
day_close.to_hdf("./test.h5")