我想更改以下代码的索引。我希望从函数中获得相应的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
答案 0 :(得分:1)
函数daily_price_historical
返回一个数据帧,因此daily_price_historical(x, 'JPY', exchange='CCCAGG').close
是熊猫Series
。 Series
的 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