量化中Pandas库的常用函数技巧
本文最后更新于:2021年12月22日 晚上
本文借鉴了刺猬偷腥的部分内容,在此表示感谢分享。
量化中Pandas库的常用函数技巧
1 |
|
一、 量化中的常用函数
1、读取csv文件,用pd.read_csv()
即可,参数值有:
filepath_or_buffer
=‘文件的路径’sep
=’,’,文件中列与列之间的分隔符,一般是逗号或者’\t’skiprows=1
,跳过第一行描述性语句nrows=5
,只读取前5行数据,若不指定,则读取全部数据。调试程序的时候常用,先读一部分,把代码写完再说。parse_dates=['交易日期']
,将交易日期这一列的内容转化为日期格式。如果不写这个参数,则导入的该列将是string的格式。index_col=['交易日期']
,将交易日期这一列指定为indexusecols=['交易日期','标的名称']
,只读取某些列的数据error_bad_lines=False
, 当遇到低质量的数据,程序会报错,加上这个参数后,程序就会跳过报错的数据行,然后继续读取后面的数据,使程序能够正常运行下去。na_values = null
,将数据中的null全部识别为空值。
2、看df的形状,用df.shape
,返回有多少行多少列。查看有多少行,用df.shape[0]
,查看有多少列,用df.shape[1]
。
3、显示每一行或每一列的名字,用df.index
或df.columns
。在for循环中常用。
4、查询每一列数据的类型,用df.dtypes
。
5、随机抽几行数据来看看,用df.sample(n=10)
。如果想随机抽10%的数据来看看,则可用df.sample(frac=0.1)
。
6、取消自动换行,取消数据修正,可用pd.set_option(‘extend_frame_repr', False)
7、设定列宽,可用 pd.set_option('max_colwidth', 10)
。若要撤销指定列宽,可用pd.reset_option('max_colwidth')
8、用label
读取行列数据的时候,一般用loc
或者iloc
,但读取单个元素的时候,建议用at
,因为效率更高。
9、如果不用label
来读取,也可以用iloc()
函数,根据索引来读取。同样,对单一元素,可以用iat()
来指定。
10、常用的统计函数包括:max()
、min()
、标准偏差std()
、count()
、中位数median()
、分位数quantile(0.25)
等。
11、位移可用shift()
函数。df.shift(1)
表示读取上一行的数据,df.shift(-1)
表示读取下一行的数据。
12、删除列,用del df.列
,也可用df.drop(列,axis=1,inplace=true)
。
13、求一阶差分可用diff()
, diff(-1)
表示该行数据与上一行数据相减。
14、求涨跌幅可用df.pct_change(-1)
,表示该行与上一行的变动比例。
15、计算累加值,可用cum
类函数,包括:cumsum()
累加值、cumprod()
累乘值。前者可用于成交量累加,后者可用于计算资金曲线的复利结果。
16、对列排序,输出排名,可用df.列.rank(ascending=true, pct=False)
, 该函数输出的是排名值,若pct=true
则输出排名的百分比。
17、计算每个元素出现的次数,可用value_counts()
。
18、筛选的方式有多种,例如:
1 |
|
19、缺失值的处理:
1 |
|
20、在使用append()
合并两个df
时,若两个数据的index
有重复,则可使用参数ignore_index=true
,这时程序就会忽略两个df
的index
,并重新建立[0,1,2,3……]的index
。
21、去重可用df.drop_duplicates()
, 其参数包含:
- 加上
subset=['列1','列2']
,即判断某一行的两列数据相同才算重复。如果不加,则需要所有列数据都相同,才认为是重复的行。 keep='last' or 'first’
,前者保留最下面一行数据,后者保留最上面一行数据。keep=false
,只要有重复的,全部删掉inplace=true
,是指是否直接在原数据上进行修改,默认为False
22、改列名可用df.rename(columns={})
, 在大括号中,需要用字面进行改名,key
表示原来的名称,value
表示改成什么内容。
23、处理列中的字符串:
1 |
|
24、处理时间变量:
1 |
|
25、滚动切片可用rolling
,例如计算最近5天的价格的平均数。
1 |
|
26、处理完数据,可用to.csv('文件名',index=false, encoding='gbk')
另存为导出数据。输出时默认会加上从0开始的index
,可以取消这个功能。
二、 重要函数的实际应用
1、 查看文件路径
当我们需要导入文件时,如果直接输入当前的绝对路径,那么在更换运行环境时,就需要手动设置新的路径。利用os
模块的自带函数,我们可以轻松解决这一问题。
1 |
|
2、 调用简单函数的方法
假设我们写了一个自定义函数:
1 |
|
要调用这个函数时,可使用apply函数,也可以使用lambda函数进行调用。
1 |
|
3、 补全数据
有时候获得的行情数据,会出现非交易日缺失的情况,这时就需要基于指数交易日的数据,用merge
函数对其进行补全。
还有个参数是indecator
,等于True
时增加merge
列,表明该行数据的出处,源自哪一张表,有left、right、both
的区分。
如果是堆砌,可用concat
函数,相关参数如下:
1 |
|
1 |
|
1 |
|
1 |
|
4、 resample函数
通常我们获得的数据是日线数据,需要转化成周数据或月数据时,可用resample
函数获得。
当索引为时间格式时,可用resample
函数将时间序列数据自动分割为周、月、季、年等块,然后再进行相应的处理。这里需要用到参数rule
,参数rule=’w’代表转化为周,’m’代表月,’q’代表季度,’y’代表年份。’5min’代表5分钟,’1min’代表1分钟。
1 |
|
5、 用os.walk导入数据
当输入os.walk(data_path)
时,会返回root、dirs
和files
的数据,root
是文件的路径,dir
是路径下有什么文件夹(返回列表),files
是路径下有什么文件(返回列表)。
然后程序会到第一个文件夹里面,继续返回相应的root、dirs和files……直至全部遍历。
有了这个系统自带函数,后面就好办了。
首先,我们要获得想要导入的标的的代码的列表。
1 |
|
第二步,开始根据列表来导入数据
1 |
|
6、 CSV的替代——HDF
一般储存数据是用csv格式,但pandas提供了一种更高效率的方式,那就是hdf格式。
想象一张Excel表,sheetname这里称作KEY,参数mode可以是w新建,也可以是a,append。更多参数如下:
保存的命令为:
1 |
|
要读取的时候,可以用 pd.read_hdf(path, key='')
1 |
|
7、 分组统计的groupby函数
一张超大的数据表中,我们想要看某只标的的平均价格,可用groupby
函数来实现。
1、基本的groupby
用法
1 |
|
除此之外,还可以
1 |
|
输出的时候,默认group
的变量,即标的代码为index
,不想这样的话,可以用as_index=False
, 例如:
print stock_data.groupby('标的代码',as_index=False)
还可以
1 |
|
还可以输出排名,用rank()
1 |
|
2、进阶的groupby
用法
前面介绍的resample、apply、fillna
等函数,都可以嵌入到groupby
函数里面。
当然,也可以用笨办法,用for key, group in df.groupby('列名称'):
将所需功能遍历一遍,以达到相同的效果。key
是列名,列的每一个内容,group
是该列的内容。
遍历的时候,对group
进行单独操作即可,例如group.apply()或group.fillna()
。
然后只要将每个group append
起来即可。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!