从Cryptocompare API提取数据时的AttributeError

时间:2018-01-12 18:34:15

标签: python json request

我正在使用此功能将数据从Cryptocompare网站提取到pandas数据帧中:

def daily_price_historical(symbol, comparison_symbol='USD', limit=1, aggregate=1, exchange='', allData='true'):
    url = 'https://min-api.cryptocompare.com/data/histoday?fsym={}&tsym={}&limit={}&aggregate={}&allData={}'\
        .format(symbol.upper(), comparison_symbol.upper(), limit, aggregate, allData)
    if exchange:
        url += '&e={}'.format(exchange)
    page = requests.get(url)
    data = page.json()['Data']
    df = pd.DataFrame(data)
    df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
    df.set_index('timestamp', inplace=True)
    df['symbol'] = symbol
    df['1dret'] = 100* df['close'].pct_change()
    return df

这适用于我传入的大多数符号,但是当我遍历更长的符号列表时,我得到错误:AttributeError:' DataFrame'对象没有属性'时间'

我认为这是由于API为某些符号返回错误,例如:

https://min-api.cryptocompare.com/data/histoday?fsym=FAKE&tsym=USD

返回"响应":"错误"没有进一步的数据

我担心我对网址请求/ API不太熟悉。是否有我可以添加到函数中的代码来跳过导致问题的符号?

感谢您的帮助!

其他信息:

用于循环硬币的代码(130个符号的列表):

price_columns = ['close', 'high', 'low', 'open', 'time', 
'volumefrom','volumeto', 'symbol', '1dret']
top_coin_prices = pd.DataFrame(columns=price_columns)

for coin in coins:
    output = daily_price_historical(coin)
    top_coin_prices = top_coin_prices.append(output)

完整追溯:

AttributeError                            Traceback (most recent call last)
<ipython-input-277-126f5d1686b2> in <module>()
      8 # populate df with data for all coins
      9 for coin in coins:
---> 10     output = daily_price_historical(coin)
     11     top_coin_prices = top_coin_prices.append(output)
     12 

<ipython-input-111-65b3fa76b4ab> in daily_price_historical(symbol, comparison_symbol, limit, aggregate, exchange, allData)
      7     data = page.json()['Data']
      8     df = pd.DataFrame(data)
----> 9     df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
     10     df.set_index('timestamp', inplace=True)
     11     df['symbol'] = symbol

/anaconda/lib/python3.6/site-packages/pandas/core/generic.py in __getattr__(self, name)
   2968             if name in self._info_axis:
   2969                 return self[name]
-> 2970             return object.__getattribute__(self, name)
   2971 
   2972     def __setattr__(self, name, value):

AttributeError: 'DataFrame' object has no attribute 'time'

0 个答案:

没有答案
相关问题