Python 如何使用zip通过定义的函数轻松获取列表中每个硬币对的数据帧?(熊猫)

Python 如何使用zip通过定义的函数轻松获取列表中每个硬币对的数据帧?(熊猫),python,pandas,data-analysis,Python,Pandas,Data Analysis,我定义了一个函数,可以获取硬币的历史价格: def get_price(成对): df=binance.fetch_ohlcv(对,限制=258,timeframe=“1d”) 重命名(列={0:“日期”,1:“打开”,2:“高”,3:“低”,4:“关闭”,5:“卷”}) df[“date”]=pd.to_datetime(df[“date”],unit=“ms”)+pd.Timedelta(小时=8) df.set_索引(“日期”,原地=真) 返回df 然后我想使用zip函数创建两个相互对应

我定义了一个函数,可以获取硬币的历史价格:

def get_price(成对):
df=binance.fetch_ohlcv(对,限制=258,timeframe=“1d”)
重命名(列={0:“日期”,1:“打开”,2:“高”,3:“低”,4:“关闭”,5:“卷”})
df[“date”]=pd.to_datetime(df[“date”],unit=“ms”)+pd.Timedelta(小时=8)
df.set_索引(“日期”,原地=真)
返回df
然后我想使用zip函数创建两个相互对应的列表,这样我就可以轻松地应用该函数来获取名称列表中每个硬币的历史数据:

name=[“btc”,“eth”]
symbol=[“BTC/USDT”、“ETH/USDT”]
对于名称,请在zip中配对(名称、符号):
名称=获取价格(对)
以太

但当我键入“eth”以获取“eth/USDT”的数据帧时,它给了我一个错误“NameError:name'eth'未定义”。我这样做的原因是,如果我有一个超过10对硬币的列表,我不想一个接一个地使用get_price函数来获取所有硬币的历史数据。有人能帮我修复这个错误吗?谢谢

如果您想保持现有的状态,您可能需要执行另一个功能。 第一部分(在那里你可以得到df,因为你已经检查过了)。问题在于第二部分,您正在尝试运行该函数。下面的更改可能会有所帮助

示例运行此命令&它将打印
ETH/USDT
作为输出

def func(x):
    name=["btc","eth"]
    symbol=["BTC/USDT","ETH/USDT"] 
    for name,pair in zip(name,symbol):
        if name == x:
            print(pair)
func('eth')
类似地,如果您想运行获取df的函数,请尝试以下操作

def func(x):
    name=["btc","eth"]
    symbol=["BTC/USDT","ETH/USDT"] 
    for name,pair in zip(name,symbol):
        if name == x:
            get_price(pair)
func('eth')

如果你想保持现有的状态,你可能需要做另一个功能。 第一部分(在那里你可以得到df,因为你已经检查过了)。问题在于第二部分,您正在尝试运行该函数。下面的更改可能会有所帮助

示例运行此命令&它将打印
ETH/USDT
作为输出

def func(x):
    name=["btc","eth"]
    symbol=["BTC/USDT","ETH/USDT"] 
    for name,pair in zip(name,symbol):
        if name == x:
            print(pair)
func('eth')
类似地,如果您想运行获取df的函数,请尝试以下操作

def func(x):
    name=["btc","eth"]
    symbol=["BTC/USDT","ETH/USDT"] 
    for name,pair in zip(name,symbol):
        if name == x:
            get_price(pair)
func('eth')
使用
dict
存储
dataframes
原始代码:
name=[“btc”,“eth”]
symbol=[“BTC/USDT”、“ETH/USDT”]
对于名称,请在zip中配对(名称、符号):
名称=获取价格(对)
  • 循环试图将一个
    pd.DataFrame
    对象分配给一个字符串,但该字符串无效。
    • 我很惊讶,这并没有导致出现
      语法错误:无法分配给literal
    • 等价地,
      name=get\u price(对)
      → <代码>'eth'=pd.DataFrame()
  • 从笔记本中,我可以看到一个名称和符号列表,您正试图为其创建单独的数据帧
  • 笔记本显示,
    get\u price
    在给定符号时返回数据帧
替换代码:
  • 下面的代码将创建数据帧的
    dict
    ,其中
    name
    中的每个
    字符串都是
df_dict=dict()
对于名称,请在zip中配对(名称、符号):
df_dict[名称]=获取价格(对)
df_dict['eth']
使用
dict
存储
数据帧
原始代码:
name=[“btc”,“eth”]
symbol=[“BTC/USDT”、“ETH/USDT”]
对于名称,请在zip中配对(名称、符号):
名称=获取价格(对)
  • 循环试图将一个
    pd.DataFrame
    对象分配给一个字符串,但该字符串无效。
    • 我很惊讶,这并没有导致出现
      语法错误:无法分配给literal
    • 等价地,
      name=get\u price(对)
      → <代码>'eth'=pd.DataFrame()
  • 从笔记本中,我可以看到一个名称和符号列表,您正试图为其创建单独的数据帧
  • 笔记本显示,
    get\u price
    在给定符号时返回数据帧
替换代码:
  • 下面的代码将创建数据帧的
    dict
    ,其中
    name
    中的每个
    字符串都是
df_dict=dict()
对于名称,请在zip中配对(名称、符号):
df_dict[名称]=获取价格(对)
df_dict['eth']

为什么要键入
eth
?您的函数在
for
循环中运行。仅仅键入
eth
是没有意义的。如果您试图创建任意数量的变量,请参考:为什么键入
eth
?您的函数在
for
循环中运行。仅键入
eth
是没有意义的。如果您试图创建任意数量的变量,请参考: