Цикл и добавить компонент функции в качестве индекса - PullRequest
0 голосов
/ 16 мая 2019

Я хотел бы изменить индекс следующего кода.Вместо того, чтобы в качестве индекса использовать «close», я хочу получить соответствующий x из функции.Как иногда в этом примере, даже если я предоставлю 4 curr, доступны только 3.Это означает, что я не могу добавить список в качестве индекса после циклического изменения размера.Спасибо за помощь.Я должен добавить, что даже с set_index (x) индекс остается «закрытым».

Функция daily_price_historical извлекает цены из открытого API.Есть ровно 7 столбцов, из которых я выбираю первый (закрыть).

Функция:

def daily_price_historical(symbol, comparison_symbol, all_data=False, limit=1, aggregate=1, exchange=''):
    url = 'https://min-api.cryptocompare.com/data/histoday?fsym={}&tsym={}&limit={}&aggregate={}'\
        .format(symbol.upper(), comparison_symbol.upper(), limit, aggregate)
    if exchange:
        url += '&e={}'.format(exchange)
    if all_data:
        url += '&allData=true'
    page = requests.get(url)
    data = page.json()['Data']
    df = pd.DataFrame(data)
    df.drop(df.index[-1], inplace=True)
    return df

Код:

curr = ['1WO', 'ABX','ADH', 'ALX']

d_price = [] 
for x in curr:
  try:
    close = daily_price_historical(x, 'JPY', exchange='CCCAGG').close
    d_price.append(close).set_index(x)
  except:
    pass
d_price = pd.concat(d_price, axis=1)
d_price = d_price.transpose()
print(d_price)

Вывод:

            0
close  2.6100
close  0.3360
close  0.4843

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Функция daily_price_historical возвращает фрейм данных, поэтому daily_price_historical(x, 'JPY', exchange='CCCAGG').close - это панда Series. title для Series является его именем, но вы можете изменить его с помощью переименования.Итак, вы хотите:

...
close = daily_price_historical(x, 'JPY', exchange='CCCAGG').close
d_price.append(close.rename(x))
...

В исходном коде d_price.append(close).set_index(x) вызвало исключение AttributeError: 'NoneType' object has no attribute 'set_index', поскольку append в списке возвращает None, но исключение было вызвано после append и былоexcept: pass

что помнить: никогда использовать очень опасно:

try:
    ...
except:
    pass

, скрывающее любую ошибку.

0 голосов
/ 16 мая 2019

Попробуйте этот маленький код

import pandas as pd
import requests

curr = ['1WO', 'ABX','ADH', 'ALX']
def daily_price_historical(symbol, comparison_symbol, all_data=False, limit=1, aggregate=1, exchange=''):
    url = 'https://min-api.cryptocompare.com/data/histoday?fsym={}&tsym={}&limit={}&aggregate={}'\
            .format(symbol.upper(), comparison_symbol.upper(), limit, aggregate)
    if exchange:
        url += '&e={}'.format(exchange)
    if all_data:
        url += '&allData=true'
    page = requests.get(url)
    data = page.json()['Data']
    df = pd.DataFrame(data)
    df.drop(df.index[-1], inplace=True)
    return df

d_price = []
lables_ind = []
for idx, x in enumerate(curr):
    try:
        close = daily_price_historical(x, 'JPY', exchange='CCCAGG').close
        d_price.append(close[0])
        lables_ind.append(x)
    except:
        pass

d_price = pd.DataFrame(d_price,columns=["0"])
d_price.index = lables_ind
print(d_price)

выход

          0
1WO  2.6100
ADH  0.3360
ALX  0.4843
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...