序列(Series)
1、由索引和对应的数值两部分组成
2、只能有两列:索引列和数据列
3、pd.Series([list],index=[list]),index不填则默认为从0开始
import pandas as pd
stock
Out[4]:
array([[ 0.003731, 0.021066, -0.004854, 0.006098, -0.00606 ],
[-0.001838, 0.001842, -0.016544, -0.003738, 0.003752],
[-0.003087, -0.000344, -0.033391, 0.007123, 0.004597],
[-0.024112, 0.011704, -0.029563, -0.01457 , 0.016129]])
series1=pd.Series(stock[:,0],index=['股票a','股票b','股票c','股票d']);series1
#通过stock数组生成序列,选取每支股票首个交易日的数据
Out[5]:
股票a 0.003731
股票b -0.001838
股票c -0.003087
股票d -0.024112
dtype: float64
series2=pd.Series(stock[0],index=range(1,6));series2
#选取第一支股票每天的收益率数据生成序列
Out[8]:
1 0.003731
2 0.021066
3 -0.004854
4 0.006098
5 -0.006060
dtype: float64
series3=pd.Series({'a':10,'b':20,'c':30,'d':40,'e':50});series3
#字典自带索引
Out[14]:
a 10
b 20
c 30
d 40
e 50
dtype: int64
数据框(DataFrame)
1、序列是一维数据,数据框是多维数据
2、第一个参数是data,第二个参数index是行名,第三个参数columns是列名
3、除了从excel和csv文件导入数据,还可从wind等数据库的API接口导入
数据框的建立和导出
sid=['股票a','股票b','股票c','股票d']
date=['2018-09-03','2018-09-04','2018-09-05','2018-09-06','2018-09-07']
stockre=pd.DataFrame(stock,sid,date);stockre
Out[18]:
2018-09-03 2018-09-04 2018-09-05 2018-09-06 2018-09-07
股票a 0.003731 0.021066 -0.004854 0.006098 -0.006060
股票b -0.001838 0.001842 -0.016544 -0.003738 0.003752
股票c -0.003087 -0.000344 -0.033391 0.007123 0.004597
股票d -0.024112 0.011704 -0.029563 -0.014570 0.016129
stockre.to_excel('C:/Users/lenovo/Desktop/return.xlsx')
#以excel(或CSV、txt)读出文件,保存在桌面,命名为return
外部数据导入生成数据框
close=pd.read_csv('C:/Users/lenovo/Desktop/quantitative investment/closeprice.csv',encoding='gb18030')
#读入一个csv文件。表格中含有中文或者特殊字符,编码改为'gb18030'
close
Out[35]:
ticker secShortName tradeDate closePrice
0 1 平安银行 2017/6/20 9.12
1 2 万科A 2017/6/20 21.03
2 4 国农科技 2017/6/20 27.03
3 5 世纪星源 2017/6/20 5.45
4 6 深振业A 2017/6/20 8.87
5 7 全新好 2017/6/20 15.87
close2=pd.read_excel('C:/Desktop/closeprice.xlsx',sheet_name='sheet1',header=0,index_col=0)
#sheet_name为要导入的工作表,header指定列名的行,index_col指定索引的列
数据框的可视化
1、kind表示图形类型,可选line,bar,hist,pie,scatter等;
2、subplots=True表示有子图,默认无;
3、若有子图,sharex=True表示共用x轴刻度及标签,默认否,sharey同理;
4、use_index表示默认用索引做x轴;
5、若有子图,layout=(2,2)表示子图4个,两行两列;
6、figsize=(10,8)表示图形尺寸大小;
7、title=‘2018沪深300指数走势’;
8、grid=True表示有网格,默认无;
9、fontsize设置轴刻度字体大小,单位是磅。
import warnings
# filter warnings
warnings.filterwarnings('ignore')
# 正常显示中文
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 以黑体字体显示中文
mpl.rcParams['axes.unicode_minus']=False
# 解决图像中负号显示为方块的问题
HS300=pd.read_excel('C:/Users/lenovo/Desktop/quantitative investment/沪深300指数.xlsx',header=0,index_col=0)
HS300.head()
Out[39]:
开盘点位 最高点位 最低点位 收盘点位
日期
2018-01-02 4045.2086 4087.7789 4045.2086 4087.4012
2018-01-03 4091.4607 4140.0543 4088.7302 4111.3925
2018-01-04 4114.1213 4137.6420 4105.8858 4128.8119
2018-01-05 4133.3439 4151.2818 4123.2817 4138.7505
2018-01-08 4140.8545 4166.3182 4127.3081 4160.1595
HS300.plot(kind='line',subplots=True,sharex=True,layout=(2,2),figsize=(10,8),title='2018沪深300指数走势',grid=True,fontsize=13)
Out[40]: