zoukankan      html  css  js  c++  java
  • 处理丢失数据

    一 . 简单的股票分析

    使用tushare包获取某股票历史行情数据
    输出该股票所有收盘比开盘上涨3%以上的日期
    输出该股票所有开盘比前日收盘跌幅超过2%的日期
    假如我从2010年1.1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有的股票,到今天为止,我的收益如何

      导包

    import pandas
    from pandas import Series,DataFrame
    import numpy as np
    import tushare

      可以去帮助文档看tushare的用法

    df_tushare = tushare.get_k_data(code='600519',start='2000-01-01')   # code是股票代码,start是起始日期,写的早于上市时间,就按上市时间开始

      把数据写到文件里

    # 写入数据
    df_tushare.to_csv('./maotai.csv')

      

    # 将data列的数据转成时间序列,然后将改列作为整个数据的行索引
    data = pandas.read_csv('./maotai.csv',index_col='date',parse_dates=['date'])
    data.drop(labels='Unnamed: 0',axis=1,inplace=True)  # 关于drop的方法,axis=1代表列,0代表行,inplace=True,代表在原数据上修改

      输出该股票所有收盘比开盘上涨3%以上的日期

    # 输出该股票所有收盘比开盘上涨3%的日期
    # (收盘-开盘)/开盘 > 0.03
    indexs = (data['close']-data['open'])/data['open'] > 0.03  # 返回的是布尔值,满足条件是True
    data.loc[indexs].index   # 中括号里面可以写布尔值

      让数据向后推一个

    data['close'].head().shift(1)

      输出该股票所有开盘比前日收盘跌幅超过2%的日期

    indexs = (data['open'] - data['close'].shift(1))/data['close'].shift(1)< -0.02
    data.loc[indexs].index

      假如我从2010年1.1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有的股票,到今天为止,我的收益如何

    new_data = data['2010-01':'2019']   # 切片可以只切年,也可以切到月,日
    
    # 找出每一年的第一个交易日对应的行数据(数据的重新取样)
    df_month_first = new_data.resample('M').first()     # M代表月份  日期是最后一天,但是数据是第一天的数据
    
    # 获取每年的最后一次开盘价
    df_year_last = new_data.resample('Y').last()
    df_year_last[:-1]
    
    # 然后自己算就OK啦

    二 . 处理丢失数据

      两种丢失数据

        1. None

        2. num.nan(NaN)

    import numpy
    import pandas
    from pandas import Series,DataFrame

      numpy.nan(NaN)是浮点型,能参与计算,但是计算结果是NaN

      pandas中的None和NaN

      pandas中None与numpy.nan都视作numpy.nan

      创建DataFrame

    df = DataFrame(data=numpy.random.randint(0,100,size=(10,12)))
    
    # 将某些数组元素复制为nan
    df.iloc[1,1] = None
    df.iloc[5,6] = None
    df.iloc[3,5] = None
    df.iloc[4,4] = None
    df.iloc[2,8] = numpy.nan
    
    # 将NaN对应的行删除
    # 1.进行空值检测
    df.isnull()
    df.isnull().any(axis=1)   # isnull 和 any一起用  True证明有空值
    df.notnull().all(axis=1)  # notnull 和 all一起用   False证明有空值
    
    过滤函数
    df.dropna() 由于是与drop相关的函数,所以axis=0代表行
    df.dropna(axis=0)   # 删除NaN所在的行
    
    填充函数  df.fillna() 返回的是DateFrame,可以继续调用fillna
    df.fillna(method='bfill',axis=0)  # 这里的axis=0是列 ,按照前边的值填充
    df.fillna(method='ffill',axis=1)  # 按照 行 后边的值填充
    
    # 如果一列里连着多个NaN,这时候就需要用行填充
  • 相关阅读:
    DROP TABLE 恢复【一】
    Recover InnoDB dictionary
    Percona XtraDB Cluster
    主从复制延时判断
    Keepalived+MySQL实现高可用
    Performance Tuning MySQL
    Redis实现异步消息队列与延时队列
    Python多线程中的setDaemon
    Python实现远程控制单片机led状态
    【机器学习】朴素贝叶斯应用实例
  • 原文地址:https://www.cnblogs.com/attila/p/10928289.html
Copyright © 2011-2022 走看看