简体   繁体   中英

How can I get multiple dataframes returned from a class function?

So I have made a class that takes in a ticker symbol, and it returns a dataframe with all the price information for the dates specified. here is the code below:

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

now this works perfectly, but ideally id like to pass in a list of symbols and have it return a seperate df for each symbol. so for example,

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

and id like it to return 4 seperate dfs, each named aapl_df , msft_df etc. is there any way to do this?

ive tried using a for loop like so

for i in symbols:
    stock = GetStockInfo(i)

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

but im not sure how to get it to return seperate dfs.

You could put the dataframes in a list and return that. Or better yet, in a dictionary:

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

    results[i] = stock.build_df('2019-01-01', '2020-01-01')
return results

As I commented, you can also do something like this:

Edit :

I guess you don't need to __init__ at all

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

Also, I think your question more about how to access those dfs like you mentioned aapl_df,msft_df... ?

You can just do results['aapl'] instead of writing aapl_df - and so on.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM