我无法弄清楚为什么下面的主要代码会从相对简单的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
对此提出任何建议表示感谢。谢谢。
答案 0 :(得分:0)
@Jeff作为上述评论回答了我的问题。通过将2.4x中的numexpr更新为版本2.4.6,问题就不复存在了。