问题描述
我正在用 Python 做一个金融项目。我正在使用 Pandas 数据框和 DataReader 来获取不同银行的股票数据。我有一个“代码”列表,它们是以下函数的输入:
tickers= ['BAC','C','GS','JPM','MS','WFC'] # list of tickers
BAC = data.DataReader('BAC','stooq',start,end). # example function for 1st element
我可以为列表的每个元素编写函数并将其存储在不同的变量中。但是我想自动化这个过程,而是创建一个函数,它遍历代码并调用一个变量来用列表中的任何元素填充它。帮帮我?
解决方法
我相信你想要的是一个简单的 for 循环作为起点:
returned_values = []
for tick in tickers:
returned_values.append(data.DataReader(tick,'stooq',start,end))
returned_values 列表将包含您所有的返回值。
,您可以使用 setattr() 向类添加变量,但您需要一个类来保存变量:
class DataReader:
def __init__(self,ticker,something,stop):
self.ticker = ticker
self.something = something
self.start = start
self.stop = stop
class test:
def __init__(self,tickers):
for t in tickers:
setattr(self,t,DataReader(t,1,1))
new = test(['BAC','C','GS','JPM','MS','WFC'])
测试:
print(new.BAC)
<__main__.DataReader object at 0x0000017847C10128>
然而,更好的方法是将对象保存在字典中:
tickers = {t: DataReader(t,1) for t in ['BAC','WFC']}
输出:
{'BAC': <__main__.DataReader at 0x17847d6af28>,'C': <__main__.DataReader at 0x17847d6ac18>,'GS': <__main__.DataReader at 0x17847d6af60>,'JPM': <__main__.DataReader at 0x17847d6afd0>,'MS': <__main__.DataReader at 0x17847d6a7f0>,'WFC': <__main__.DataReader at 0x17847d6a828>}
,
您可以将所有结果存储在 dict
中并访问您需要的任何一个:
my_dict = {t: data.DataReader(t,end) for t in tickers}
,
你可以像这样填写字典:
tickers = ['BAC','WFC']
BAC = {tick:data.DataReader(tick,end) for tick in tickers}