循环并添加功能组件作为索引

时间:2019-05-16 08:48:42

标签: python indexing

我想更改以下代码的索引。我希望从函数中获得相应的x而不是以“ close”作为索引。就像有时在此示例中一样,即使我提供4个货币,也只有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 个答案:

答案 0 :(得分:1)

函数daily_price_historical返回一个数据帧,因此daily_price_historical(x, 'JPY', exchange='CCCAGG').close是熊猫SeriesSeries title 是它的名称,但是您可以使用重命名对其进行更改。所以你想要:

...
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之后引发的,并且{@ {1}}笼罩着所有人。

要记住的内容:从不使用非常危险的内容:

except: pass

隐藏任何错误。

答案 1 :(得分:0)

尝试这个小代码

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