简单的Python操作无法提供一致的outpu

2024-09-29 01:29:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么下面的主代码从一个相对简单的python数据帧操作中给出了不一致的输出。主代码中似乎有问题的部分如下:

dfResult = dfPrices/dfPrices.shift(1)

“dfPrices”和“dfResult”都是数据帧。你知道吗

主代码首先检索价格数据并以pandas面板类型的形式存储它。然后使用相同的固定/不变的数据,我循环了1000次,做了简单的数据帧分割操作,应该会得到相同的结果。每当输出不一致时,它就会打印出不一致的值。从1000个循环中,我通常得到5-20个不一致的输出。大多数被认为不一致的输出都有一个0.0的值,但有时也会是一些非零数。所以平均错误率是1%,但是如果我使用更复杂的操作,如果下载的数据量增加,错误率可以达到10%。pandas模块中可能有bug还是我的代码?你知道吗

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

仅供参考,我使用的是Windows10和Anaconda发行版。我有Pandas版本0.17.0和Pandas datareader版本0.2.0

如果您对此有任何建议,我将不胜感激。非常感谢。你知道吗


Tags: 数据代码importpandasfordatashiftloc