0

以下のメインコードが、比較的単純な 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 があります。

これに関するアドバイスをいただければ幸いです。ありがとうございました。

4

1 に答える 1

0

@Jeff は上記のコメントとして私の質問に答えました。numexpr をバージョン 2.4.4 から 2.4.6 に更新することで、問題はなくなりました。

于 2016-01-30T07:30:52.643 に答える