首页 > 编程语言 >python中缺失值处理——在因子选股中的应用

python中缺失值处理——在因子选股中的应用

时间:2024-07-14 19:58:52浏览次数:13  
标签:arr 索引 python nan np num 数组 选股 缺失

​在因子选股当中,如果直接对整个数据库进行操作,对于股价历史数据,经常出现由于股票退市等造成的缺失值,但是在回测时,如果只用有值的股票,会由于维度不匹配而报错。

因此,经常需要把整张数据表中的非空数据取出,进行处理,再填回因子矩阵中。

由于基本上每次都会用到,所以本人专门写了函数来完成这个操作。

首先,导入numpy

import numpy as np

使用numpy包来进行矩阵操作

第一个函数,用来取出矩阵中的非空值

# 取出数组非空值及其坐标

def get_not_nan(arr):

    # 判断维数
    # 如果是1维,则直接使用np.isnan来判断,再将返回值作为索引取出非空值
    # 如果是多维,则取出没有空值的列

    dimension = len(arr.shape)
    # print("是{0:}维数组".format(dimension))

    # 一维直接索引,多维取出没有nan的列
    if dimension > 1:
        column = np.argwhere(np.isnan(arr).sum(axis=0) == 0).flatten()
        # np.argwhere()接收一个数组作为参数,返回值为True的位置的索引
        # np.isnan()接收一个数组作为参数,返回一个维度相同的由布尔值构成的数组,nan为True,其他为False
        # arr.flatten()方法能够压平一个数组,把任何维度的数组压平为1维
        arr_num = arr[:, column]

        # 返回取出的不含nan的列队值,以及列的索引
        return arr_num, column
    else:
        # 得到空值的索引
        arr_nan = np.isnan(arr)
        index = ~arr_nan
        # 取出非空的值
        arr_num = arr[index]

        return arr_num, index

对于np.argwhere(np.isnan(arr).sum(axis=0) == 0).flatten(),先判断数组中的空值,再按列求和,再判断和0的关系,最后得到0值的索引并展平

第二个函数,用来把取出来并处理后的值加回到数组里

def get_back_num(arr, column, num_arr):
    """
    :param arr: 原数组
    :param column: 新数组中有值的位置的索引
    :param num_arr: 要填进去的值
    :return: 除了填进去的值,其他都是nan
    """
    if len(arr.shape) > 1:
        length = arr.shape[1]
    else:
        length = arr.shape
    full_nan = np.full(length, np.nan)
    
    # np.full(维度,填充物)建立一个以填充物填充的数组,这里以nan填充

    full_nan[column] = num_arr

    # 通过上一个函数返回的列索引,把处理后的结果加回到数组    

    factor = full_nan
    return factor

在因子选股中,假如有5000支股票,每列为一只股票,行为日期,其中800只在时间段内退市,则可能存在nan,因此使用get_not_nan来取出不含nan的列,即没退市的股票,进行回归等分析后,再使用get_back_num把处理结果,即因子值,返回到一个(5000,)的数组中,并按照最开始的位置摆放,则未退市股票有因子值,退市股票位置为nan,之后便可进行回测。

标签:arr,索引,python,nan,np,num,数组,选股,缺失
From: https://blog.csdn.net/m0_70629983/article/details/140307159

相关文章

  • 线性插值法的MATLAB实现——对股票非交易日缺失数据进行插值
    1.为什么要处理非交易日股票缺失数据  由于在计算无风险利率时,常常使用国债利率,但国债利率按360天计息,因此股票收益率需要和债券计息相匹配,所以需要对股票缺失数据进行插值。2.为什么使用线性插值法  当数据点之间距离很短时,就可以近似认为两点间可以用直线连接。类......
  • python 66 个冷知识 0714
    66个有趣的Python冷知识生成随机浮点数random.uniform(a,b)生成区间[a,b]之间的随机浮点数。反向枚举使用reversed()和enumerate()可以反向枚举列表。单元测试装饰器unittest提供了@unittest.skip装饰器用于跳过测试。动态类型Python是动态类型语言......
  • python 基础10 requests
    requests官方文档:https://requests.readthedocs.io/projects/cn/zh-cn/latest/快速上手https://requests.readthedocs.io/projects/cn/zh-cn/latest/user/quickstart.html安装找到目标路径Scriptspipinstallrequests-ihttps://pipy.douban.com/simple发送请求简洁:im......
  • python-关于返回值return
    一.含义        "return"是编程语言中的一个关键字,通常用于函数或方法的结尾,表示将执行结果返回给调用者。        通俗讲就是一个事物反馈给你的东西。就像你一拍桌子,会返回声音和力的反作用力。二.作用1.负责函数返回值,返回一个参数或数据等。2.退出当......
  • 使用 Python 处理 Lumerical 导出的 .txt 文件(完结)
    使用Python处理Lumerical导出的.txt文件引言正文以,隔开的波长与透射率以\t隔开的波长与透射率引言之前在添加链接描述一文中我们已经介绍了如何将Lumerical仿真中的S参数相关数据导出为.txt文件。这里我们来分享如何使用Python对这些......
  • 用python生成词频云图(python实例二十一)
    目录1.认识Python2.环境与工具2.1python环境2.2VisualStudioCode编译3.词频云图3.1代码构思3.2代码实例3.3运行结果4.总结1.认识PythonPython是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,相比其他语......
  • 【Python】自动化抢票脚本【某麦网】
    1.脚本介绍1.1背景介绍在这个数字化时代,演唱会、体育赛事和各种活动的门票销售往往在线上进行。由于热门活动的高需求和门票的有限供应,抢票成为了一场激烈的竞争。许多粉丝和爱好者经常因为手速不够快或网络延迟而错失购票机会。为了提高抢票的成功率,自动化抢票脚本应运......
  • Python函数(1)--自定义函数与作用域
    函数的定义Python中的函数是一段组织好的、可重复使用的、用来实现单一或相关联功能的代码块。函数能提高应用的模块性,和代码的重复可用性。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被称为用户自定义函数。自定义函数假设,我们现在求一......
  • python 基础 九 Chorme handless
    ChromehandlessChromehandless模式,Google针对Chrome浏览器59版新增的一种模式,可以让你不打开UI界面的情况下使用Chrome浏览器,所以运行效果与Chrome保持完美一致Chromehandless的系统要求1、Chrome版本要求Unix/Linux系统要求chrome>=59Windows系统需要......
  • 01-python基础
    DAY-01课堂笔记为后续的自动化测试打基础python+requests:接口自动化python+selenium:web自动化python+appium:移动端自动化python是解释型语言下方代码的错误不会影响上方代码的执行主流版本:python3基础语法注释:对代码进行解释说明快捷键:ctrl+/单行注释:#......