python金融量化分析_python金融量化分析

DataFrame是一个表格型的数据结构,还有一组有序的列

DataFrame可以被看作是由Series组成的字典,并且共用一个索引

创建方式

pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})

pd.DataFrame({'one':pd.Series([1,2,3,4],index=['a','b','c','d']),'two':pd.Series([1,2,3,4],index=['b','a','c','d'])})

csv文件读取与写入

df=pd.read_csv('test.csv') #把csv读出啦

df.to_csv('test2.csv') #存一个csv文件

DataFrame查看数据

查看数据常用属性及方法

index 获取行索引

T 转置

columns 获取列索引

values 获取值数组

describe 获取快速统计

DataFrame各列name属性:列名

rename(columns={...}) #如df.rename(columns={'close':'new_close','open':'new_open'}) #修改字段名

df.index.name='iid' #修改索引字段名

DataFrame索引和切片

DataFrame有行索引和列索引

通过标签获取:

df['close'] #取一列

df['close'][0] #取一个数字

df[['close','open']] #取两列,二维数组

df[0:10][['close','open']] #前十行的两列数据

DataFrame索引和切片

通过位置获取:

df.iloc[3] #取第3行数据

df.iloc[3,3] #取第3行的第3个数据

df.iloc[0:3,4:6] #取前3行的4,5列数据

df.iloc[1:5,:] #取前4行的所有数据

df.iloc[[1,2,4],[0,3]] #取第1,2,4行,第3列的数据

通过布尔值过滤:

df[df['close']>20] #取close列大于20的值的行

df[df['date'].isin(['2007/3/1','2007/3/4'])] #取2007.3.1到2007.3.4之间的行

df[df['id'].isin([1,3,5,7])] #取id列1,3,5,7行的数据

DataFrame数据对齐与缺失数据

DataFrame对象在运算时,同样会进行数据对齐,结果的行索引与列索引分别为两个操作数的行索引与列索引的并集

DataFrame处理缺失数据的方法

dropna(axis=0,how='any') #axis 默认0等于列,1等于行。how 默认any任意一个就删除,all全部都是nan就删除

fillna(),isnull(),notnull()

pandas其他常用方法(适用Series和DataFrame)

mean(axis=0,skipna=False)

sum(axis=1)

sort_index(axis,...,ascending) 按行或列索引排序 如 df.sort_index(ascending=True,axis=1),按列排序。与之相反df.sort_index(ascending=False,axis=0)

sort_values(by,axis,ascending) 按值排序 如df.sort_values('close',ascending=True) close列的数据从大到小排序

NumPy的通用函数同样适用于pandas

apply(func,axis=0) 将自定义函数应用在各行或者各列上,func可返回标量或者Series df2.apply(lambdax:x.sum()) 各列值之和。同df2.sum()

applymap(func) 将函数应用在DataFrame各个元素上 如df2.applymap(lambda x:x+1) 每一个数字都加1

map(func) 将函数应用在Series各个元素上

pandas层次化索引

层次化索引是pandas的一项重要功能,它使我们能够在一个轴上拥有多个索引级别

例:

data=pd.Series(np.random.rand(9),index=[['a','a','a','b','b','b','c','c','c'],[1,2,3,1,2,3,1,2,3]])

data['a'][1] #两层索引

pandas从文件读取

读取文件:从文件名,url,文件对象中加载数据

read_csv 默认分隔符为逗号

read_table 默认分隔符为\t

读取文件函数主要参数:

sep 指定分隔符,可以用正则表达式如:"\S+"header=None 指定文件无列名

names 指定列名

index_col 指定某列作为索引

skiprows 指定跳过某些行

na_values 指定某些字符串表示缺失值。默认就会将缺失值读取成NaN。所以可以不指定

parse_dates 指定某些列是否解析为日期,布尔值或列表

nrows 指定读取几行文件

chunksize 分块读取文件,指定块大小

例子:

df=pd.read_table('test.csv', #读取文件

sep=',', #以逗号分割,默认读取一整行

header=None, #没有列名

names=['id','date','open','close','high','low','valume','code'], #设置列名

skiprows=[1,2,3,4], #跳过0到3行

index_col='date', #date列设置为索引

parse_dates=['date']) #将date转换成时间对象。也可以写布尔值

type(df.index[0]) 查看类型

pandas写入到文件

写入到文件

to_csv

写入文件函数的主要参数

sep

na_sep 指定缺失值转换的字符串,默认为空字符串

header=False 不输出列名一行

index=False 不输出索引一行 #这样可以解决读取文件的时候多出一列,写入文件的时候过滤掉多出来的列

cols 指定输出的列、传入列表

其他文件类型:json/XML/HTML/数据库

pandas时间对象处理

时间序列类型:

时间戳: 特定时刻

固定时期:如2017年7月

时间间隔:起始时间~结束时间

Python标准库:datetime

date time datetime timedelta

strftime()

strptime()

第三方包: dateutil

dateutil.parser.parse("2017-01-01")。如没有日的话。就以现在的日期填充

成组处理日期:pandas

pd.to_datetime(['2017-01-01','2017-01-02'])

产生时间对象数组:date_range

start 开始时间

end 结束时间

periods 时间长度

freq 时间频率,默认为D,可选

H(our),W(eek),B(usiness),S(emi-)M(onth),M(min)T(es),S(econd),A(year)

pd.date_range("2017-01-01",'2017-02-01',frep='B') #1月1,到2月1的工作日。SM半月,Y年,Y-MON每周一

pd.date_range("2017-01-01",periods=100) #生成100天

df['2007'] #获取有2007的数据

df['2007-03-01':'2007-03-08'] #获取一段时间

时间序列就是以时间对象为索引的Series或DataFrame

datetime对象作为索引时是存储在DatetimeIndex对象的

时间序列特殊功能

传入年或年月作为切片方式

传入日期范围作为切片方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值