函数中的参数方法

时间:2016-10-19 16:04:20

标签: python r function pandas methods

我希望在函数中的参数中使用python / pandas中的方法。 例如,数据框的滚动统计信息:

def rolling (df, prefix = 'r', window = 3, method = 'here I wanna choose a method' ):
    for name in df.columns:
        df[prefix + name] = df[name].rolling(window).'here this method been called'
    return df

'mean()'或'sum()'或者其他...... 喜欢

df.rolling(2).sum()

我在R中工作了95%,在R中它很简单(把函数作为参数或返回任何函数)。但在python我noob。所以我创建包以使事情变得更容易。像:

def head(x,k = 3):
    return x.head(k)

python中的哪个函数帮助我在函数中使用像参数这样的方法?

#some data
import numpy as np
import pandas as pd
from pandas_datareader.data import DataReader
from datetime import datetime
ibm = DataReader('IBM',  'yahoo', datetime(2000,1,1), datetime(2016,1,1))

ibm2 = rolling(ibm,'rr', 5, 'sum') # something like this

3 个答案:

答案 0 :(得分:3)

您可以将getattr与str的方法名称一起使用。这将从对象获取具有该名称的属性(在本例中为方法)

def rolling (df, prefix='r', window=3, method='sum'):
    for name in df.columns:
        df[prefix + name] = getattr(df[name].rolling(window), method)()
    return df

或者你可以传递方法。调用它时,第一个参数将是self

def rolling (df, prefix='r', window=3, method=DataReader.sum):
    for name in df.columns:
        df[prefix + name] = method(df[name].rolling(window))
    return df

答案 1 :(得分:1)

我这样做

def rolling (df, prefix='r', window=3, method='method_name'):
    for name in df.columns:
        df[prefix + name] = df[name].rolling(window).__getattribute__(method)()
    return df

答案 2 :(得分:0)

方法是一个与任何其他属性一样的属性(它恰好在绑定到对象时可以调用),因此您可以使用getattr。 (默认值None当然是无稽之谈,但我不想重新排序您的签名,以使method更早出现而没有默认值。)

def rolling (df, prefix='r', window=3, method=None):
    for name in df.columns:
        obj = df[name].rolling(window)
        m = getattr(obj, method)
        df[prefix + name] = m()
    return df