2016-05-31 97 views
-4

我正在嘗試編寫一個函數,它接受一個非變量函數。我通常不會編寫函數,但在我學習時,我正在嘗試使腳本更加Pythonic,節省時間。將參數作爲函數中的參數傳遞?

例子:

source = pd.DataFrame(
    { 
     'Name': ['John', 'Mike', 'John', 'John'], 
     'Year': ['1999', '2000', '2000', '2000'], 
     'Message': ['I Love You', 'Will Remember You', 'Love', 'I Love You'] 
    } 
) 

def unstack(df, keyword): 
    d = (df.keyword.str.split(expand=True).stack) 

unstack(source, year) 

我想獲得的是:

d = (df.year.str.split(expand=True).stack) 

我知道這是很平常的有效密鑰傳遞給函數,但我試圖讓功能接受爭論並將其用作關鍵。

希望你明白了。

+4

我不知道你在說什麼。什麼是「非變量」? – syntonym

+0

對不起,我可能不知道正確的用語。但這個例子更清楚地解釋了它。 – BernardL

+3

你的意思是說你想將「year」這個詞傳遞給函數,以便讓函數訪問該對象的「年」屬性? – khelwood

回答

2

要獲得dfkeyword屬性,使用:

getattr(df, keyword) 

這樣:

def unstack(df, keyword): 
    d = getattr(df, keyword).str.split(expand=True).stack 

但是,它會更好,只是爲了讓調用約定的這一部分:

unstack(df.year) # suggested convention 

而不是

unstack(df, 'year') # practice required by the code above 
+0

謝謝。很好的經驗教訓。 – BernardL