Crear múltiples cuadros de datos en bucle

Tengo una lista, cada entrada es el nombre de una empresa

companies = ['AA', 'AAPL', 'BA', ....., 'YHOO'] 

Quiero crear un nuevo dataframe para cada entrada en la lista.

Algo como

(pseudocódigo)

 for c in companies: c = pd.DataFrame() 

He buscado una manera de hacer esto, pero no puedo encontrarlo. ¿Algunas ideas?

Puede hacer esto (aunque obviamente use exec con extrema precaución si va a ser un código público)

 for c in companies: exec('{} = pd.DataFrame()'.format(c)) 

Solo para subrayar mi comentario a la respuesta de @maxymoo, es casi invariablemente una mala idea (” olor de código “) agregar nombres dinámicamente a un espacio de nombres de Python. Hay una serie de razones, siendo la más destacada:

  1. Los nombres creados pueden fácilmente entrar en conflicto con las variables ya utilizadas por su lógica.

  2. Dado que los nombres se crean dinámicamente, normalmente también terminas usando técnicas dinámicas para recuperar los datos.

Por eso se incluyeron los dicts en el lenguaje. La forma correcta de proceder es:

 d = {} for name in companies: d[name] = pd.DataFrame() 

Hoy en día puedes escribir una sola expresión de comprensión de dictado para hacer lo mismo, pero a algunas personas les resulta menos legible:

 d = {name: pd.DataFrame() for name in companies} 

Una vez que se crea d el DataFrame para la compañía x se puede recuperar como d[x] , por lo que puede buscar una compañía específica con bastante facilidad. Para operar en todas las compañías, normalmente se usa un bucle como:

 for name, df in d.items(): # operate on DataFrame 'df' for company 'name' 

En Python 2 eres mejor escribiendo.

 for name, df in d.iteritems(): 

porque esto evita crear instancias de una lista de (name, df) tuplas.

Añadiendo a las grandes respuestas anteriores. Lo anterior funcionará sin problemas si necesita crear marcos de datos vacíos, pero si necesita crear múltiples marcos de datos basados ​​en algunos filtros:

Supongamos que la lista que recibió es una columna de algún dataframe y desea crear múltiples marcos de datos para cada compañía única para el dataframe más grande:

  1. Primero tome los nombres únicos de las empresas: –

     compuniquenames = df.company.unique() 
  2. Cree un diccionario de marcos de datos para almacenar sus marcos de datos

     companydict = {elem : pd.DataFrame() for elem in compuniquenames} 

Los dos anteriores ya están en el post:

 for key in DataFrameDict.keys(): DataFrameDict[key] = df[:][df.company == key] 

Lo anterior le dará un dataframe para todas las empresas únicas con registro coincidente.