简单 Python Pandas 操作未能提供一致的输出
Simple Python Pandas operation failed to provide consistent output
我不明白为什么下面的主要代码会从一个相对简单的 python pandas DataFrame 操作中给出不一致的输出。似乎有问题的主要代码部分是以下行:
dfResult = dfPrices/dfPrices.shift(1)
'dfPrices' 和 'dfResult' 都是 DataFrame。
主代码首先检索价格数据并将其以pandas面板类型的形式存储。然后使用相同的 fixed/unchanging 数据循环 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
如有任何建议,我们将不胜感激。谢谢。
@Jeff 在上面的评论中回答了我的问题。通过将 numexpr 从 2.4.4 更新到版本 2.4.6,问题不再存在。
我不明白为什么下面的主要代码会从一个相对简单的 python pandas DataFrame 操作中给出不一致的输出。似乎有问题的主要代码部分是以下行:
dfResult = dfPrices/dfPrices.shift(1)
'dfPrices' 和 'dfResult' 都是 DataFrame。
主代码首先检索价格数据并将其以pandas面板类型的形式存储。然后使用相同的 fixed/unchanging 数据循环 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
如有任何建议,我们将不胜感激。谢谢。
@Jeff 在上面的评论中回答了我的问题。通过将 numexpr 从 2.4.4 更新到版本 2.4.6,问题不再存在。