【问题标题】:Simple Python Pandas operation failed to provide consistent output简单的 Python Pandas 操作无法提供一致的输出
【发布时间】:2016-01-30 03:39:11
【问题描述】:

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

dfResult = dfPrices/dfPrices.shift(1)

'dfPrices' 和 'dfResult' 都是 DataFrames。

主代码首先检索价格数据并以 pandas 面板类型的形式存储。然后使用相同的固定/不变数据,我循环了 1000 次,执行简单的 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 版

不胜感激。谢谢。

【问题讨论】:

  • 确保你有 numexpr=2.4.6,2.4.4 有问题
  • @Jeff Bullseye!太感谢了。我更新了 numexpr,错误率降到了 0% :)) Anaconda 没有合并这个更新,所以不能简单地使用 'conda update --all' 来更新 numexpr。

标签: python pandas panel anaconda pandas-datareader


【解决方案1】:

@Jeff 在上面的评论中回答了我的问题。通过将 numexpr 从 2.4.4 更新到版本 2.4.6,问题不再存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 2018-03-12
    • 2020-12-20
    • 2020-11-01
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多