2015-09-10 3 views
1

Я пытаюсь создать функцию, которая принимает уже отформатированный json.loads().Python Pandas с функциями и значениями столбца равными

def data_fp(fp): 
    for line in fp: 
    try: 
     data=json.loads(line) 
     json_data.append(data) 
    except: 
     continue 

Я принимаю json_data и пытаюсь его очистить. Я создал пустой блок данных и создал функцию.

df=pd.DataFrame() 

def data_clean(liste): 
    df['col1'] = map(lambda datas: datas['col1'] if 'col1' in datas else 'NA', liste) 
    df['col2'] = map(lambda datas: datas['col2'] if 'col2' in datas else 'NA', liste) 
    df=df[df['col2']=='foo'] 

Проблема возникает из последней строки. Когда я включил его в функцию, я получаю ошибку

UnboundLocalError: local variable 'df' referenced before assignment

Но когда я запускаю функцию без последней строки в нем, я не получаю никаких ошибок, и я могу запустить == строку в консоли и получить желаемый результат.

Почему это не работает в функции?

ответ

1

Любая переменная, назначенная функцией, является локальной для этой функции, если только она не объявлена ​​глобально. Таким образом, без назначения вы получаете доступ к глобальной переменной, и все идет хорошо, с назначением вы получаете доступ к не объявленной локальной переменной, следовательно, к ошибке.

Посмотрите здесь: http://effbot.org/pyfaq/how-do-you-set-a-global-variable-in-a-function.htm

+0

И спасибо за сайт. Я добавил его к моим favs – lost

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