2016-02-23 3 views
-1

Я пытаюсь запустить цикл для импорта нескольких текстовых файлов в Pandas и создания кросс-таблиц. Код ниже:Python «Невозможно назначить оператору» Ошибка при использовании функции цикла

def delta_calc(start_year,end_year): 
for x in range(start_year, end_year+1,1): 
    return 
    "disposition"+x+"_24mo_df"=pd.read_table("path/lps_"+x+".txt",compression='gzip',sep='\t') 
    "disposition"+x+"_24mo_df".sort(['loan_id','last_paid_interest_date'], ascending=[True,False], inplace=True) 
    "disposition"+x+"_24mo_nodups_df"="disposition"+x+"_24mo_df".drop_duplicates('loan_id') 
    "disposition"+x+"_24mo_crosstab"=pd.crosstab("disposition"+x+"_24mo_nodups_df".initial_investor_code,"disposition"+x+"_24mo_nodups_df".current_investor_code, margins=True) 

Однако, я получаю следующее сообщение об ошибке:

File "<ipython-input-63-d662d71d1354>", line 4 
      "disposition"+x+"_24mo_df"=pd.read_table("path/lps_"+x+".txt",compression='gzip' ,sep='\t') 
^ 
SyntaxError: can't assign to operator 

Любая помощь будет принята с благодарностью.

+1

Сообщение об ошибке не могло быть яснее. То, что вы пытаетесь сделать, это 'a + b = some_function()'. Что это должно быть/делать? Кроме того, ваш синтаксис выключен ('return \ n ... \ n ... \ n') – Jasper

+0

Имена переменных не являются строками, и вы не можете их компоновать так же, как вы создаете строки. «disposition» + x + «_ 24mo_df» - это выражение, а не переменная и не может быть назначено. –

ответ

0

Проблема заключается в том, что вы присваиваете выражение:

"disposition"+x+"_24mo_df"=pd.read_table("path/lps_"+x+".txt",compression='gzip',sep='\t') 

Та же проблема с этим:

"some string" + x + "another string" = some_code() 

, который не является действительным.

Возможно, что = знак должен быть чем-то еще?

1

Этот вид выглядит как обычный начинающий ошибку пытается динамически генерировать имена переменных, как val_1, val_2 ..., val_N, вместо того, чтобы использовать список, или кучу списков в вашем случае.

Вы можете использовать .append(), чтобы добавить новый элемент в конец списка и проиндексировать его с помощью [-1], чтобы получить текущий последний элемент в списке. Начало будет выглядеть примерно так:

def delta_calc(start_year,end_year): 
    disposition_24mo_df = [] 
    disposition_24mo_nodups_df = [] 
    disposition_24mo_crosstab = [] 
    for x in range(start_year, end_year+1): 
     disposition_24mo_df.append(pd.read_table(...)) 
     disposition_24mo_df[-1].sort(...) 

Хотя я не имел никакого практического опыта работы с пандами, так что это может быть вне базы.

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