【问题标题】:SymbolWarning: Failed to read symbol replacing with NaNSymbolWarning:无法读取用 NaN 替换的符号
【发布时间】:2016-10-14 19:13:52
【问题描述】:

我正在尝试使用 pandas 下载所有斯德哥尔摩大盘股的历史股票数据。它工作正常,但对于某些股票却没有。

import pandas_datareader.data as pdr
import datetime
import csv

with open('stockholm_largecap.csv', 'rb') as f:
    reader = csv.reader(f)
    stockholmLargeCap = list(reader)

start = datetime.datetime(1970, 1, 1)
end = datetime.datetime.today();

stockData = {}

for symbol in stockholmLargeCap:
    f = pdr.DataReader(symbol, 'yahoo', start, end)
    print f

stockholm_largecap.csv 包含按字母顺序排列的所有股票,但是一旦我获得某些股票,我就会得到(例如 BETS-B.ST): SymbolWarning:无法读取符号:'BETS-B.ST',替换为 NaN .脚本终止。有什么方法可以继续程序,忽略错误以及某些股票无法正常工作的原因是什么?

raise RemoteDataError(msg.format(self.__class__.__name__))
pandas_datareader._utils.RemoteDataError: No data fetched using 'YahooDailyReader'

【问题讨论】:

  • 复制你得到的错误,这样我们就可以看到引发了什么 ValueError
  • 抱歉,已将其添加到问题中。

标签: python pandas anaconda


【解决方案1】:

使用tryexcept

import pandas_datareader.data as pdr

for symbol in ['SPY', 'holla']:
    try:
        f = pdr.DataReader(symbol, 'yahoo', "2001-01-01", "2010-01-01")
        print f.head(5)
    except:
        print ('did not find: '+symbol)

               Open     High      Low    Close    Volume  Adj Close
Date                                                               
2001-01-02 132.0000 132.1562 127.5625 128.8125   8737500    95.2724
2001-01-03 128.3125 136.0000 127.6562 135.0000  19431600    99.8488
2001-01-04 134.9375 135.4687 133.0000 133.5468   9219000    98.7740
2001-01-05 133.4687 133.6250 129.1875 129.1875  12911400    95.5497
2001-01-08 129.8750 130.1875 127.6875 130.1875   6625300    96.2893
did not find: holla

【讨论】:

  • 我在问题中添加了 RemoteDataError (正如您正确推测的那样)。虽然现在我得到“除了 RemoteDataError: NameError: name 'RemoteDataError' is not defined”。
  • 尝试新版本,如果不起作用,请删除 RemoteDataError
  • 它不适用于 RemoteDataError,当我删除它时,它没有找到任何代码,甚至没有找到以前工作的代码。
  • 应该可以,我尝试使用假代码并获得正确的输出
  • 似乎被缓存了一些东西,当我重新启动时工作。虽然我想知道为什么许多股票行不通。
【解决方案2】:

我在尝试从列表中获取股票时遇到了同样的问题,我使用了异常处理块,尽管出现了符号警告即继续执行代码。[ SymbolWarning: Failed to read symbol: 'AXZZW',替换为 NaN。 warnings.warn(msg.format(sym), SymbolWarning)]

from pandas_datareader._utils import RemoteDataError
from pandas_datareader.data import Options
try:
    df1 = web.DataReader(rows[i],'yahoo',"2001-01-01","2010-01-01")
    print("Downloading",i,"/",len(rows),"............")
    print(df1)
except KeyError:
    print("Data not found at Ticker %s"%i)
    continue
except RemoteDataError:
    print("Data not found at Ticker %s"%i)
    continue
print("Success!")

希望这对你也有用!

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 2012-01-26
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多