0
def priceusd(df):
    return df['closeprice'][-1]*btcusdtclose[-1]

此函数使用数据框作为参数,通过将其比特币价格乘以比特币美元价格来给出某种资产的美元价格。

我想要做的只是让资产的名称成为参数,而不是价格数据来自的数据框。我所有的数据框都被命名为assetbtc。例如 ethbtc 或 neobtc。我希望能够将 eth 传递给函数并返回ethbtc['closeprice'][-1]*btcusdtclose[-1]

例如,

def priceusd(eth):
    return ethbtc['close'][-1]*btcusdtclose[-1]

我试过了,它没有用,但你可以看到我想要做什么

def priceusd(assetname):  '{}btc'.format(assetname)['close'][-1]*btcusdtclose[-1].

非常感谢。

4

2 回答 2

2

没有必要eval在这种情况下使用。正如@wwii 所说,将 DataFrame 存储在字典中,以便您可以轻松地按名称检索它们。

例如

coins_to_btc = {
    'eth': ethbtc,
    'neo': neobtc,
}

然后,

def priceusd(name):
    df = coins_to_btc[name]

    return df['close'][-1]*btcusdtclose[-1]
于 2018-07-18T18:10:52.893 回答
1

您应该从包含它的任何内容中获取所需的数据框,而不是尝试使用 str 作为数据框。我的意思是你应该使用你形成的 str 从它所在的位置获取数据帧。

例如,假设您已将 priceusd 函数放置在包含您创建的所有数据框的同一模块中,例如:

abtc = df1()
bbtc = df2()
cbtc = df3() 
# and so on...

def priceusd(asset):
    asset_container = priceusd.__module__
    asset_name = f'{asset}btc'
    df = getattr(asset_container, asset_name)
    # now do whatever you want with your df (dataframe) 

如果您的代码结构与我假设的不同,您可以替换获取asset_container 的代码。但你通常应该明白我的意思......

于 2018-07-18T18:23:27.943 回答