Shion
Shion

Reputation: 319

List as names for names of Pandas Dataframes

I want to make the names of some stock symbols the actual name of a pandas dataframe.

import pandas as pd
import pandas_datareader.data as pdr

choices = ['ROK', 'HWM', 'PYPL', 'V', 'KIM', 'FISV', 'REG', 'EMN', 'GS', 'TYL']

for c in choices:
     pdr.DataReader(c, data_source='yahoo', start=datetime(2000,1,1), 
     end=datetime(2020,1,1)).to_csv(f'Data/{c}.csv')
     f'{c}'['Price'] = pd.read_csv(f'Data/{c}.csv', index_col='Date')['Adj Close']

I'm getting this error: TypeError: 'str' object does not support item assignment

Is there a way to go about doing this? Maybe perhaps using the name of the stock symbol as the name of the dataframe is not the best convention.

Thank you

Upvotes: 0

Views: 42

Answers (2)

Norton409
Norton409

Reputation: 109

You shouldn't be storing variables with string as it can get quite messy down the line. If you wanted to keep with your convention I'd advise storing your dataframes as a dictionary with the stock symbols as a key

choices = ['ROK', 'HWM', 'PYPL', 'V', 'KIM', 'FISV', 'REG', 'EMN', 'GS', 'TYL']
choices_dict = {}
for c in choices:
     pdr.DataReader(c, data_source='yahoo', start=datetime(2000,1,1), 
     end=datetime(2020,1,1)).to_csv(f'Data/{c}.csv')
     csv_pd = pd.read_csv(f'Data/{c}.csv', index_col='Date')['Adj Close']
     choices_dict[c] = pd.DataFrame(csv_pd, columns=['Price'])

Upvotes: 0

Paulo Marques
Paulo Marques

Reputation: 911

You can put it in a data structure as a dictionary.

import pandas as pd
import pandas_datareader.data as pdr

choices = ['ROK', 'HWM', 'PYPL', 'V', 'KIM', 'FISV', 'REG', 'EMN', 'GS', 'TYL']

dataframes = {}

for c in choices:
     pdr.DataReader(c, data_source='yahoo', start=datetime(2000,1,1), 
     end=datetime(2020,1,1)).to_csv(f'Data/{c}.csv')
     dataframes[c] = pd.read_csv(f'Data/{c}.csv', index_col='Date')['Adj Close']

So, you will get a structure like the one bellow:

>>> print(dataframes)
{'ROK': <your_ROK_dataframe_here>,
 'HWM': <your_HWM_dataframe_here>,
 ...
}

Then, you can access a specific dataframe by using dataframes['XXXX'] where XXXX is one of the choices.

Upvotes: 1

Related Questions