0

我正在用 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 

我可以为列表的每个元素编写函数并将其存储在不同的变量中。但我想自动化这个过程,而是创建一个函数,它遍历代码并调用一个变量来用列表中的任何元素填充它。帮帮我?

4

4 回答 4

1

我相信您想要的是一个简单的 for 循环作为起点:

returned_values = []
for tick in tickers:
    returned_values.append(data.DataReader(tick, 'stooq', start, end))

returned_values 列表将包含您所有的返回值。

于 2021-06-16T14:39:41.937 回答
1

您可以使用 setattr() 将变量添加到类中,但您需要一个类来保存变量:

class DataReader:
    
    def __init__(self, ticker, something, start, 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, 'stooq', 1, 1))

new = test(['BAC','C','GS','JPM','MS','WFC'])

测试:

print(new.BAC)
<__main__.DataReader object at 0x0000017847C10128>

然而,更好的方法是将对象保存在字典中:

tickers = {t: DataReader(t, 'stooq', 1, 1) for t in ['BAC','C','GS','JPM','MS','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>}
于 2021-06-16T14:39:54.580 回答
0

您可以将所有结果存储在 adict并访问您需要的任何一个:

my_dict = {t: data.DataReader(t, 'stooq', start, end) for t in tickers}
于 2021-06-16T14:40:11.207 回答
0

您可以像这样填写字典:

tickers = ['BAC','C','GS','JPM','MS','WFC']
BAC = {tick:data.DataReader(tick, 'stooq', start, end) for tick in tickers}
于 2021-06-16T14:41:07.170 回答