2016-11-21 28 views
3

我有一個熊貓數據框,並試圖使用apply()函數在一列中的條目上傳遞一個函數。爲什麼我需要lambda將函數應用到熊貓數據框?

我的函數的形式爲:

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 

我的數據框的形式爲:

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))) 

它工作正常。

我明白Lambda是如何工作的(至少我以爲我做過)。我不明白爲什麼我需要它。

爲什麼我需要lambda在數據框上成功傳遞函數? apply()函數不應該按照定義來做這件事嗎?或者它是否有效地做到了這一點,即將我的數據框傳遞給函數,並返回一些輸出,而不是迭代地將函數應用於數據框(如果有意義的話)?

任何人都可以提供任何見解嗎?

我衷心的感謝!

+2

在這種情況下,'lambda'是沒有必要的:'DF [ 'SR'] = DF [」信息']。apply(foo)'只會工作 – EdChum

回答

1

拉姆達是不必要的,你可以做

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

這裏仍然可以工作

+0

這很奇怪。因爲當我在這裏做完全一樣的時候,事實並非如此。爲了清楚起見,我會用完整的foo內容更新我的Q. – Chuck

+0

我的歉意:你是對的。這確實解決了這個問題。我的下一個問題就是爲什麼lambda會被需要呢? (但也許這是一個更適合其他地方的更普遍的問題) – Chuck

+2

要理解的是'lambda'只是正常函數定義的語法糖:https://docs.python.org/3/tutorial/ controlflow.html#lambda表達式,他們有一個限制,只能接受一個參數,這是個人喜好老實說,沒有一個'lambda'做一個正常的func不能做的事情 – EdChum

相關問題