2016-09-18 15 views
1

log_returns行列から最初の行を削除しようとしたときに突然動かなくなりました。基本的には、NaN値を持つため、最初の行を取り除きたいです。私は喜んでisnan()を試してみましたが、最後にnumpy.delete()という方法で着きましたが、これは最も有望ですが、まだ目的を達成していません。行列の最初の行を削除できません

import pandas as pd 
from pandas_datareader import data as web 
import numpy as np 

symbols = ['XOM', 'CVX', 'SLB', 'PXD', 'EOG', 'OXY', 'HAL', 'KMI', 'SE', 'PSX', 'VLO','COP','APC','TSO','WMB','BHI','APA','COG','DVN','MPC','NBL','CXO','NOV','HES','MRO','EQT','XEC','FTI','RRC','OKE','SWN','NFX','HP','MUR','CHK','RIG','DO'] 

try: 
    h9 = pd.HDFStore('port.h9') 
    data = h9['norm'] 
    h9.close() 
except: 
    data = pd.DataFrame() 
    for sym in symbols: 
     data[sym] = web.DataReader(sym, data_source='yahoo', 
           start='1/1/2010')['Adj Close'] 
    data = data.dropna() 
    h9 = pd.HDFStore('port.h9') 
    h9['norm'] = data 
    h9.close() 

data.info() 
log_returns = np.log(data/data.shift(1)) 
log_returns.head() 
np.delete(log_returns, 0, 0) 

最後の行(削除する)が上記row = 0として意味をなさない次の例外をスローし、location = 0形状(1116,37)であるlog_returnsマトリックスの範囲の外に確実ではありません。

ValueError: Shape of passed values is (37, 1115), indices imply (37, 1116) 
+3

何について: 'log_returns = log_returns.iloc [1:]'? – MaxU

+0

['np.delete()'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.delete.html)の2番目の引数はおそらくそれがあなたの考えではありません。あなたが最初の行を捨てるだけなら、@ MaxUの提案が道です。また、 'np.nan!= np.nan'は' np.delete'の仕事をさらに困難にします。 –

+0

MaxU - ilocメソッドが効果を発揮しました!どうもありがとう。また、Andrasに感謝します。 – skafetaur

答えて

0

デモ:

In [202]: from pandas_datareader import data as web 

In [218]: df = web.DataReader('XOM', 'yahoo', start='1/1/2010')['Adj Close'] 

In [219]: pd.options.display.max_rows = 10 

In [220]: df 
Out[220]: 
Date 
2010-01-04 57.203028 
2010-01-05 57.426378 
2010-01-06 57.922715 
2010-01-07 57.740730 
2010-01-08 57.509100 
       ... 
2016-09-12 87.290001 
2016-09-13 85.209999 
2016-09-14 84.599998 
2016-09-15 85.080002 
2016-09-16 84.029999 
Name: Adj Close, dtype: float64 

In [221]: np.log(df.head(10).pct_change() + 1) 
Out[221]: 
Date 
2010-01-04   NaN 
2010-01-05 0.003897 
2010-01-06 0.008606 
2010-01-07 -0.003147 
2010-01-08 -0.004020 
2010-01-11 0.011157 
2010-01-12 -0.004991 
2010-01-13 -0.004011 
2010-01-14 0.000144 
2010-01-15 -0.008214 
Name: Adj Close, dtype: float64 

ソリューション:

In [224]: np.log(df.pct_change() + 1).dropna() 
Out[224]: 
Date 
2010-01-05 0.003897 
2010-01-06 0.008606 
2010-01-07 -0.003147 
2010-01-08 -0.004020 
2010-01-11 0.011157 
       ... 
2016-09-12 0.005169 
2016-09-13 -0.024117 
2016-09-14 -0.007185 
2016-09-15 0.005658 
2016-09-16 -0.012418 
Name: Adj Close, dtype: float64 

か:

In [225]: np.log(df.pct_change() + 1).iloc[1:] 
Out[225]: 
Date 
2010-01-05 0.003897 
2010-01-06 0.008606 
2010-01-07 -0.003147 
2010-01-08 -0.004020 
2010-01-11 0.011157 
       ... 
2016-09-12 0.005169 
2016-09-13 -0.024117 
2016-09-14 -0.007185 
2016-09-15 0.005658 
2016-09-16 -0.012418 
Name: Adj Close, dtype: float64 

か:

In [227]: np.log(df.pct_change() + 1).drop(df.index[0]) 
Out[227]: 
Date 
2010-01-05 0.003897 
2010-01-06 0.008606 
2010-01-07 -0.003147 
2010-01-08 -0.004020 
2010-01-11 0.011157 
       ... 
2016-09-12 0.005169 
2016-09-13 -0.024117 
2016-09-14 -0.007185 
2016-09-15 0.005658 
2016-09-16 -0.012418 
Name: Adj Close, dtype: float64 
関連する問題