0

我不明白为什么下面的主要代码会从一个相对简单的 python pandas DataFrame 操作中给出不一致的输出。似乎有问题的主要代码部分是以下行:

dfResult = dfPrices/dfPrices.shift(1)

'dfPrices' 和 'dfResult' 都是 DataFrame。

主代码首先检索价格数据并以 pandas 面板类型的形式存储。然后使用相同的固定/不变数据循环 1,000 次,执行简单的 pandas DataFrame 除法运算,应该会产生相同的结果。只要有不一致的输出,它就会打印出不一致的值。从 1,000 个循环中,我通常会得到 5-20 个不一致的输出。大多数被认为不一致的输出的值为 0.0,但有时它也可能是一些非零数。所以错误率平均约为 1%,但如果我使用更复杂的操作,并且如果下载的数据量增加,错误率可以达到 10%。熊猫模块中可能有错误还是我的代码?

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 回答