處理丟失數據

一 . 簡單的股票分析

使用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)dom

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,這時候就須要用行填充
相關文章
相關標籤/搜索