2015-06-04 6 views
2

У меня есть список, каждая запись является названием компанииСоздание нескольких dataframes в цикле

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

Я хочу создать новую dataframe для каждой записи в списке.

Что-то вроде

(псевдокод)

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

Я искал способ сделать это, но не могу найти его. Есть идеи?

+0

Вы хотите, чтобы каждая компания находилась в отдельной колонке или все компании в одной колонке? – Scott

+1

Если вам нужна DataFrame для каждой компании, какие данные будут содержать каждый? – Alexander

ответ

5

Вы можете сделать это (хотя, очевидно, использовать exec с особой осторожностью, если это будет публично-облицовочный код)

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

В IPython ноутбук я файла «», строка 1 S.1 = pd.DataFrame() ^ SyntaxError: недопустимый синтаксис –

+0

Это действительно работает, если я не использую петлю и просто выполнить EXEC statatement с Значение randmo c, например format ('test') –

+1

В сообщении об ошибке говорится, что «S.1» не является допустимым именем переменной, поскольку переменная не может содержать знаков препинания. Вы можете исправить это, изменив код на 'format (c.replace ('.', ''))'. – maxymoo

22

Просто, чтобы подчеркнуть свой комментарий к ответу @ maxymoo, это почти всегда плохая идея («запах кода») для динамического добавления имен в пространство имен Python. Существует ряд причин, наиболее значимых:

  1. Созданные имена могут легко противоречить переменным, уже используемым вашей логикой.

  2. Поскольку имена динамически создаются, вы обычно также используете динамические методы для извлечения данных.

Именно поэтому в этот язык были включены дикты. Правильный способ продолжить это:

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

В настоящее время вы можете написать один Dict постижение выражение делать то же самое, но некоторые люди считают его менее читаемым:

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

После d создается DataFrame для компании x можно получить как d[x], так что вы можете легко найти конкретную компанию. Для того, чтобы работать на все компании, которые Вы обычно используете цикл вроде:

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

В Python 2 вы лучшее письмо

for name, df in d.iteritems(): 

, поскольку это позволяет избежать инстанцирования списка (name, df) кортежей.

+2

Хорошо, я об этом не думал, но ты абсолютно прав. – maxymoo

+3

Этот ответ научил меня многому. – Moondra

Смежные вопросы