2016-05-31 140 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