Python 尝试使用datareader从列表创建数据帧

Python 尝试使用datareader从列表创建数据帧,python,pandas,dataframe,variables,pandas-datareader,Python,Pandas,Dataframe,Variables,Pandas Datareader,我试图定义一个函数,它获取一个股票代码列表,并为每个代码创建一个数据框,其中包含来自yahoo finance的正确数据 首先,函数采用*arg 一旦传递了一个ticker/一组ticker,函数就会在列表中循环 对于每个ticker,该函数调用数据读取器并获取特定ticker上的数据 该数据存储在名为“df”+str(ticker)的数据帧中 我有: import pandas_datareader as pdr import pandas as pd def Finance1(*args

我试图定义一个函数,它获取一个股票代码列表,并为每个代码创建一个数据框,其中包含来自yahoo finance的正确数据

首先,函数采用*arg

一旦传递了一个ticker/一组ticker,函数就会在列表中循环

对于每个ticker,该函数调用数据读取器并获取特定ticker上的数据

该数据存储在名为“df”+str(ticker)的数据帧中

我有:

import pandas_datareader as pdr
import pandas as pd


def Finance1(*args):
    for arg in args: 
        df = pdr.get_data_yahoo(arg)
        global df'arg'
        df'arg' = df

x = "IBM"
y = "XOM"        
list = [x, y]        

Finance1(*list)

似乎无法在循环中动态创建以自动取款机atm命名的数据帧/也无法动态创建本地变量。提前谢谢

下面的Off comment在下面进行了更改,但仍然没有获得所需的输出

import pandas_datareader as pdr
import pandas as pd

dict1 = {}
def Finance1(*args):
    for arg in args:
        df = pdr.get_data_yahoo(arg)
        dict1[arg] = df
        return dict1


x = "IBM"
y = "XOM"        
list = [x, y]        

Finance1(*list)
第二次编辑

import pandas_datareader as pdr
import pandas as pd

def Finance1(*args):
    dict1 = {}
    for arg in args:
        df = pdr.get_data_yahoo(arg)
        return dict1
        dict1[arg] = df



x = "IBM"
y = "XOM"        
list1 = [x, y]        

results = Finance1(*list)
最终和正在工作:

import pandas_datareader as pdr
import pandas as pd

def Finance1(*args):
    dict1 = {}
    for arg in args:
        df = pdr.get_data_yahoo(arg)
        dict1[arg] = df
    return dict1


x = "IBM"
y = "XOM"        
list1 = [x, y]        

results = Finance1(*list1)


全局df'arg'
:是否尝试创建变量dfXYZ(如果arg=XYZ)?我很确定你不能创建这样的动态变量名。考虑在函数和循环中创建一个空字典,将DF保存到<代码> DICT[ARG]=DF。然后在函数的末尾返回DICT。这就避免了使用global-too.put
dict
={}`在for循环之外(但仍然在函数内部)。另外,将
返回dict1
上移一级。现在,您每次清空字典,并在一个循环后停止函数(这就是return所做的)。此外,您需要使用类似
result=Finance1(*list)
的内容运行函数,以便恢复结果,最后,您应该命名一个变量列表。这是一个受保护的名称关闭。。。return语句应该是函数最不应该运行的语句。这意味着它应该是最后一行,并且在for循环之外。因此,从第二次编辑向下一行,与
for
dict1
一致。另外,更改变量名后,不要忘记将函数调用更改为
*list1