python量化开发3|常用相关库和函数知识点

今天是2017.4.20r。

年后这么久才实习,这是第四天了,这几天看着代码一直是处于困和好困的状态。说实话自己还不擅长和别人打招呼,然后和小组的人吃饭都感觉拘束的不行,就当是一种锻炼吧总是要经历的。(自我安慰)

想到上周日晚上和学良坐城际回来sz,他跟我一样公司要求必须实习,于是两人就感叹有点不明白为什么快毕业了别人都是趁着论文送审后出去到处耍,而我们却还这么苦逼,我自己还要想着三方和驾照的事。反正对于自己可能真的还没有从心理上达到工作的状态,我也想要毕业旅行啊啊啊啊啊。

上一篇的知识点介绍是年前实习记录的一点,现在去看已经没有什么印象了。后面的工作涉及基金评价的开发,这几天看代码时又陆陆续续看到有用到python和数据库、用python计算一些指标等,自己对python很多库中的函数都没接触过,所以这里再接着记录一些。


1、二重MultiIndex的Series可以unstack()成DataFrame
data:

Row_1  Col_1     0        Row_2  Col_1     4
       Col_2     1               Col_2     5
       Col_3     2               Col_3     6
       Col_4     3               Col_4     7

Row_3  Col_1     8        Row_4  Col_1    12
       Col_2     9               Col_2    13
       Col_3    10              Col_3    14
       Col_4    11              Col_4    15

data.unstack():

Paste_Image.png

2、datetime库使用
datetime.datetime.strftime():用于将任何日期时间转化为指定时间格式字符串的函数
datetime.datetime.strptime():将字符串转为指定日期型的函数;

Paste_Image.png

3、replace(0,np.nan) :表示用null值来替换0

4、dropna():表示去除掉null值

5、set_index(‘NAME’):表示将列NAME设为固定的索引列,不再作为值

6、resample: Pandas中的resample,重新采样,一般是对原来的一段时间样本重新处理的一个方法。
常见的可取resample(‘d/w/m/q’)四个值 ,分别对应每天、每周周天、每个月月末、每个季度末。
Resample(‘d’).last()后一般跟一个last(),用于显示抽样出来的值。

例如:fund_nav=fund_nav.replace(0,np.nan).dropna().set_index('enddate').resample('D').last()
其中set_index('enddate').resample('D') 是将enddate作为了固定的index,然后以日期进行resample重新取样。

7、st=fund_nav.index[0]-pd.Timedelta(days=10):表示st起始日期取10天前的日期。

8、sql中where条件下的1=1
使用 where 1=1 的好处
假如我们将上述的语句改为:
  string MySqlStr=”select * from table where 1=1 ”;
  if(Age.Text.Lenght>0)
  {
    MySqlStr=MySqlStr+“and Age=“+“'Age.Text'“;
  }
  if(Address.Text.Lenght>0)
  {
    MySqlStr=MySqlStr+“and Address=“+“'Address.Text“;
  }
  现在,也存在两种假设
  ①种假设
  如果两个IF都成立,那么,语句变为:
  MySqlStr=”select * from table where 1=1 and Age='18' and Address='云南省文山州广南县小波吗村'”,很明显,该语句是一条正确的语句,能够正确执行,如果数据库有记录,肯定会被查询到。
  ②种假设
  如果两个IF都不成立,那么,语句变为:MySqlStr=”select * from table where 1=1”,现在,我们来看这条语句,由于where 1=1 是为True的语句,因此,该条语句语法正确,能够被正确执行,它的作用相当于:MySqlStr=”select * from table”,即返回表中所有数据。

9、python中len()函数可以用来计算字符串、列表以及字典的长度。

10、Python 字典(Dictionary) update() 函数
dict.update(dict2) 用于把字典dict2的键/值对更新到dict里

11.png

11、 shift()函数的使用, nav_S.shift(1)用于将series nav_S中的值整体向后移动1

12、 python中copy()和deepcopy()的区别

12.png

13、缺失值填充方法——ffill()和 bfill()
当一个series中出现缺失值时,用ffill()表示用空值的前一个值来填充,bfill()则表示用空值后面的值来填充。

obj3 = Series(['blue', 'purple', 'yellow'], index=[1, 2, 4])
a=obj3.reindex(range(6), method='ffill')
结果为:
0      blue
1      blue
2    purple
3    purple
4    yellow
5    yellow

14、pandas中iloc、loc、ix的区别是什么?
区别在于:

  • iloc是根据前多少行/列来确定值,只能接收整数
  • loc则是接收字典中的“索引值”来得到相应数值,若给的索引值不存在,则返回错误
  • ix既可以接收取前多少行的整数值,也可以接收索引值。
    s = pd.Series(np.nan, index=[49,48,47,46,45, 1, 2, 3, 4, 5])

例如:
df.iloc[3]表示取第3行的值;df.loc[3]则表示取索引值为3的值;df.ix[:'c', :4]则表示取索引值为‘c’的前几行,以及前4列的值

15、dropna()的 使用
b=a.dropna(),则直接将a中的nan值给删除掉了

0    purple  
1    purple
2    purple
3    yellow
4    yellow
5       NaN

0    purple
1    purple
2    purple
3    yellow
4    yellow

推荐阅读更多精彩内容