Как я могу получить несколько фреймов данных, возвращаемых функцией класса? - PullRequest
0 голосов
/ 06 мая 2020

Итак, я создал класс, который принимает символ тикера и возвращает фрейм данных со всей информацией о ценах на указанные даты. вот код ниже:

import pandas as pd
import numpy as np
import pandas_datareader as pdr

# class to get stock price

class GetStockInfo():

    '''
    Class to retrieve stock info and returns it as a dataframe
    '''

    def __init__(self, ticker):

        self.ticker = ticker.upper()

    def build_df(self, start_date, end_date):

        df = pd.DataFrame(pdr.DataReader(self.ticker, 'yahoo', start_date, end_date))

        return df

теперь это работает отлично, но в идеале id хотел бы передать список символов и вернуть отдельный df для каждого символа. так, например,

symbols = ['aapl','googl','msft','tsla']

и id, как это, чтобы вернуть 4 отдельных dfs, каждый из которых назван aapl_df, msft_df et c. есть ли способ сделать это?

я пытался использовать для l oop вот так

for i in symbols:
    stock = GetStockInfo(i)

    i_df = stock.build_df('2019-01-01', '2020-01-01')

, но я не уверен, как заставить его возвращать отдельные dfs.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Как я уже сказал, вы также можете сделать что-то вроде этого:

Edit :

Думаю, вам не нужно __init__ вообще

class GetStockInfo():

    '''
    Class to retrieve stock info and returns it as a dataframe
    '''

    def __init__(self):

        pass

    def build_df(self, stock, start_date, end_date):

        df = pd.DataFrame(pdr.DataReader(stock.upper(), 'yahoo', start_date, end_date))

        return df

    def build_multiple(self,symbols,start_dates,end_dates):
        result = {}
        for i in range(len(symbols)):
            result[symbols[i]] = self.build_df(symbols[i],start_dates[i],end_dates[i])
        return result

Кроме того, я думаю, ваш вопрос больше о том, как получить доступ к этим dfs, как вы упомянули aapl_df,msft_df...?

Можно просто набрать results['aapl'] вместо aapl_df - и т. Д.

1 голос
/ 06 мая 2020

Вы можете поместить фреймы данных в список и вернуть его. А еще лучше в словаре:

results = {}
for i in symbols:
    stock = GetStockInfo(i)

    results[i] = stock.build_df('2019-01-01', '2020-01-01')
return results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...