以下のメインコードが、比較的単純な python pandas DataFrame 操作から一貫性のない出力を提供している理由がわかりません。問題があると思われるメイン コードの部分は、次の行です。
dfResult = dfPrices/dfPrices.shift(1)
「dfPrices」と「dfResult」はどちらも DataFrame です。
メイン コードは、最初に価格データを取得し、pandas パネル タイプの形式で格納します。次に、同じ固定/不変データを使用して、同じ結果が得られるはずの単純な pandas DataFrame 除算操作を 1,000 回ループしました。一貫性のない出力がある場合は常に、一貫性のない値が出力されます。1,000 のループから、通常 5 ~ 20 の一貫性のない出力が得られます。一貫性がないと見なされる出力のほとんどは 0.0 の値ですが、場合によってはゼロ以外の数値になることもあります。したがって、エラー率は平均で約 1% ですが、より複雑な操作を使用し、ダウンロードされるデータの量が増加すると、エラー率は 10% に達する可能性があります。pandas モジュール内にバグがある可能性がありますか、それとも私のコードですか?
import pandas as pd
import pandas_datareader.data as web
startDate = pd.datetime(2007,7,1)
endDate = pd.datetime(2014,7,1)
stockList = ['RWX','VNQ','IJJ','IVW','VWO','IVE','TLT','GLD','SHY']
data = web.DataReader(stockList, 'yahoo', startDate,endDate)
#The for loop below is not necessary, it's just filling out some NaN values
for i in data.items:
data.loc[i,:,:].fillna(method='ffill', inplace=True)
dfPrices = data['Adj Close']
dfResult = dfPrices/dfPrices.shift(1)
reference = dfResult.loc[:,'GLD'][-1]
print 'Reference: '+str(reference)
for i in xrange(1000):
dfResult = dfPrices/dfPrices.shift(1)
actualResult = dfResult.loc[:,'GLD'][-1]
if actualResult != reference:
print actualResult
参考までに、私は Windows 10 と Anaconda ディストリビューションを使用しています。Pandas バージョン 0.17.0 と pandas-datareader バージョン 0.2.0 があります。
これに関するアドバイスをいただければ幸いです。ありがとうございました。