学习笔记(三)

学习笔记(三)
1.Fama-French三因子,计算SMB、HML
1)首先对因子分组,两种方法,map或where
data[‘HL’] = data[0].map(lambda x:‘H’ if x>50 else ‘L’)
data[‘HL1’] = np.where(data[0]>50,‘H’,‘L’)
如果分位数有两个(a和b,b>a),需要做两次map,但更推荐np.where,只需要一行
a,b = pd.quantile([0.3,0.7])
#a是第(n+1)*0.3个数,若非整数,则取相邻两个数中间
data[‘SB’] = data[1].map(lambda x:‘B’ if x>50 else ‘S’)
data[‘SB’] = data.apply(lambda x: ‘B’ if x[2]>b else data[‘SB’],axis = 1)
data[‘SB1’] = np.where(data[2]>b,‘B’,np.where(data[2]<a,‘S’,‘M’))
2)取出不同的组,例如取出B和H
data_BH = data.query(’(SB==“B”) & (HL==“H”)’)
需要注意query里面的写法,SB和HL是data的列,不加引号
3)取出不同组之后,计算多空收益率即可

2.最大值,df是一个dataframe
df.max()默认对列
df.max(axis=1),每一行计算最大值
np.maximum(a,b),可以用于期权
df.idxmax()默认对列,取出每列最大值的索引
df.idxmax(axis = 1)取出每行最大值的索引

3.对dataframe的列名重命名,使用字典形式
data = data.rename(columns = {‘0_HL’:‘HL’})
需要加columns,不加的话,默认对行索引

4.对Series相加相减,必须有相同的index,否则报错
若是dataframe相加,也会根据相同的index相加,若有nan,则相加后还是nan
若一定要相加,可以reset_index(drop=True)之后相加
如果对于nan和另一个数,想保留另一个数,可以fillna(0)之后相加

5.缺失值处理,np.nan不是np.nan
df.iloc[7,2] = np.nan #先令df第八行,第三列的数变成np.nan
df.iloc[7,2] == np.nan #再判断它是不是np.nan,结果报False
需要用别的判断方式
np.isnan(df.iloc[7,2])
pd.isnull(df.iloc[7,2])
pd.notnull(df.iloc[7,2])
有时候算收益率的时候,会出来inf,因为前面的数据是0,不要轻易fillna(0)。
如何剔除nan、inf?
df[~df.isin([np.nan,np.inf]).any(1)]#如果包含nan、inf,取反之后返回False,any(1)表示,只有全部为True,才返回True,any里面的1是指axis=1,对行
df.dropna(how=‘any’,axis=1) #dropna里面的axis=1,表示对列,某列里只要有np.nan,就删掉
how=‘any’/how=‘all’/thresh=10,axis=0
any表示有False的行全删掉
all表示全部是False的行才删掉
thresh=10表示某行有10个以下的观察值,才删掉它
例如说要筛选出上市一年以上的股票,threth=252
df[‘b’].str.contains(‘a’)
这个函数要求df[‘b’]列只有str,可以用来看是否有包含a这个字母
实际运用中,可以拿来筛选某个地区有哪些股票
df[‘b’].str.contains(‘浙江’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值