如何在函数中添加参数名称?

时间:2018-07-18 17:54:29

标签: python pandas cryptocurrency

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].

非常感谢您。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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的代码。但是您通常应该理解我的观点...