我不明白为什么下面的主要代码会从一个相对简单的 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 版
对此有任何建议将不胜感激。谢谢你。