2016-11-21 2 views
3

У меня есть кадр данных Pandas, и я пытаюсь передать функцию через записи в одном столбце, используя функцию apply().Зачем мне нужна лямбда для применения функций к Dataframe Pandas?

Моя функция имеет вид:

def foo(Y): 
    #accepts a pandas data frame 
    #carries out some search on the text in each row of the dataframe 
    #groups successful searches 
    #return a new column as a pandas series 

Мой dataframe имеет вид:

Info WN RN 
0 XX YY ZZ  
1 AA BB CC 
2 JJ KK LL 

Я пытаюсь выполнить:

df['SR'] = (df['Info'].apply(foo(x))) 

Моя ошибка заключается в следующем:

File "<ipython-input-11-ae54015436d8>", line 1, in <module> 
df['SR'] = (df['Info'].apply(foo(x)) 
NameError: name 'x' is not defined 

Но если я использую:

df['SR'] = (df['Info'].apply(lambda x:foo(x))) 

Он отлично работает.

Я понимаю, как работает Лямбда (по крайней мере, я думал, что сделал). Я не понимаю, зачем мне это нужно.

Зачем мне нужна лямбда, чтобы успешно передать функцию по кадру данных? Должна ли функция apply() делать это по определению?

Или это то, что я эффективно делаю это иначе, например, передавая кадр данных в функцию и возвращаю некоторый вывод, а не итеративно применяя функцию к кадру данных (если это имеет смысл)?

Может ли кто-нибудь предложить какое-либо понимание?

Моя искренняя благодарность!

+2

В этом случае 'lambda' не нужно:' DF [ 'SR'] = D [» Info ']. Apply (foo) 'будет просто работать – EdChum

ответ

1

лямбда ненужно, вы можете просто сделать

df['SR'] = df['Info'].apply(foo) 

здесь он все равно будет работать

+0

Это странно. Потому что, когда я делаю то же самое здесь, это не так. Я буду обновлять свой Q с полным содержанием foo для ясности. – Chuck

+0

Мои извинения: вы правы. Это решает проблему. Мой следующий вопрос был бы вопросом, почему лямбда нужна вообще? (но, возможно, это более общий вопрос, подходящий где-то еще) – Chuck

+2

Понятно, что 'lambda' является просто синтаксическим сахаром для определения нормальной функции: https://docs.python.org/3/tutorial/ controlflow.html # лямбда-выражения, у них есть ограничение, которое может принимать только один аргумент, это зависит от личных предпочтений, если честно, не существует ситуации, когда 'lambda' делает то, что нормальная функция не может делать – EdChum

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