简单的Python Pandas操作无法提供一致的输出

时间:2016-01-30 03:39:12

标签: python pandas panel anaconda pandas-datareader

我无法弄清楚为什么下面的主要代码会从相对简单的python pandas DataFrame操作中提供不一致的输出。似乎有问题的主要代码部分是以下行:

dfResult = dfPrices/dfPrices.shift(1)

'dfPrices'和'dfResult'都是DataFrame。

主代码首先检索价格数据并以pandas面板类型的形式存储它。然后使用相同的固定/不变数据我循环1,000次做简单的pandas DataFrame除法操作,它应该产生相同的结果。每当输出不一致时,它将打印出不一致的值。从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

对此提出任何建议表示感谢。谢谢。

1 个答案:

答案 0 :(得分:0)

@Jeff作为上述评论回答了我的问题。通过将2.4x中的numexpr更新为版本2.4.6,问题就不复存在了。