美文网首页刺猬教你量化投资
刺猬教你量化投资(十四):量化编程中的常用Pandas技巧

刺猬教你量化投资(十四):量化编程中的常用Pandas技巧

作者: 刺猬偷腥 | 来源:发表于2018-09-26 14:15 被阅读9次
    image.png

    常用pandas知识点回顾

    1、读取csv文件,用pd.read_csv()即可,参数值有:

    • filepath_or_buffer=‘文件的路径’
    • sep=',',文件中列与列之间的分隔符,一般是逗号或者'\t'
    • skiprows=1,跳过第一行描述性语句
    • nrows=5,只读取前5行数据,若不指定,则读取全部数据。调试程序的时候常用,先读一部分,把代码写完再说。
    • parse_dates=['交易日期'],将交易日期这一列的内容转化为日期格式。如果不写这个参数,则导入的该列将是string的格式。
    • index_col=['交易日期'],将交易日期这一列指定为index
    • usecols=['交易日期','股票名称'],只读取某些列的数据
    • error_bad_lines=False, 当遇到低质量的数据,程序会报错,加上这个参数后,程序就会跳过报错的数据行,然后继续读取后面的数据,使程序能够正常运行下去。
    • na_values = null,将数据中的null全部识别为空值。

    2、看df的形状,用df.shape,返回有多少行多少列。查看有多少行,用df.shape[0],查看有多少列,用'df.shape[1]`。

    3、显示每一行或每一列的名字,用df.indexdf.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,但读取单个元素的时候,建议用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、筛选的方式有多种,例如:

    df[df[ticker]=='002466']
    df[df[ticker].isin(['002466','002460'])]
    df[df[price]>10.0]  #输出股价大于10的行
    df[df.index<='01/01/2018' & df.index>='01/01/2017'] # &表示并且,|表示或者
    

    19、缺失值的处理:

    # 判断空值:
    
    df.notnull() 
    df.isnull()
    df[df.列.notnull()]  #输出某列非空值的行
    
    #删除空值:
    df.dropna(how='any') #只要有空值的行都删除
    df.dropna(how='all') #全是空值的行才删除 
    df.dropna(subset=['price','ticker'],how='all')  # subset表示只看某几列,这两列都为空才将行删掉 
    
    #填充空值:
    df.fillna(value='填充内容')
    df.fillna(method='ffill') # 向上寻找最近一个非空值进行填充
    df.fillna(method='bfill') # 向下寻找最近一个非空值进行填充
    
    

    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

    22、改列名可用df.rename(columns={}), 在大括号中,需要用字面进行改名,key表示原来的名称,value表示改成什么内容。

    23、处理列中的字符串:

    # 取每列元素的前2个字符
    df.ticker.str[:2]
    # str的功能还有
    df.ticker.str.upper()
    df.ticker.str.lower()
    df.ticker.str.len()
    df.ticker.str.strip()
    df.ticker.str.contains('sh')  # 是否包含sh
    df.ticker.str.replace('sh','sz')  # 将sh改为sz、
    
    #对字符串进行分割
    df.概念.str.split(';')[:3] #对概念字符串以;进行分割,变成一个列表,然后显示前三项内容
    df.概念.str.split(';',expand=true) # 分割后将每个元素变为单独的列
    

    24、处理时间变量:

    #将字符串变成时间变量
    df.交易日期 = pd.to_datetime(df.交易日期)
    
    #处理时间数据
    用dt库,例如df.交易日期.dt.month  # 显示对应的月份,day是天数,还可以用hour
    dt.week显示一年当中的第几周
    dt.dayof year,显示一年当中的第几天
    dt.dayofweek,显示一周当中的第几天,0代表星期一,6代表星期天,也可以从dt.weekday表示
    dt.weekday_name,直接显示星期几
    dt.days_in_month,显示一月当中的第几天
    dt.is_month_start,判断是否为月初第一天
    dt.is_month_end,判断是否为月末最后一天
    
    #时间差函数
    df.交易日期+pd.Timedelta(days=1)  # 加1天,也可能 hours=1,加一个小时
    

    25、滚动切片可用rolling,例如计算最近5天的收盘价的平均数。

    df.移动平均线5 = df.收盘价.rolling(5).mean()  # 过去5天的平均值
    df.收盘价.rolling(5).max()   # 求过去5天的最大值
    df.收盘价.rolling(5).std()   # 求过去5天的标准差
    
    # 如果要计算从一开始到现在的数据,则用expanding()
    df.迄今为止的均值 = df.收盘价.expanding().mean()
    df.迄今为止的最大值 = df.收盘价.expanding().max()
    

    26、处理完数据,可用to.csv('文件名',index=false, encoding='gbk')另存为导出数据。输出时默认会加上从0开始的index,可以取消这个功能。

    总结

    熟练掌握上述内容后,我们便可以着手构建各类型的量化投资策略。

    刺猬偷腥
    2018年9月26日

    相关文章

      网友评论

        本文标题:刺猬教你量化投资(十四):量化编程中的常用Pandas技巧

        本文链接:https://www.haomeiwen.com/subject/gvsroftx.html