我希望在函数中的参数中使用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
答案 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