Pandas在18.1版上更改了其重采样API。归约方法不再是重采样方法的自变量,而是它们自己的方法。
示例:
import pandas as pd
import numpy as np
rng = pd.date_range('1/1/2012', periods=100, freq='S')
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
#Old API
ts.resample('5Min', how='sum')
#New API
ts.resample('5Min').sum()
我有一些代码是这样的:
def my_func(my_series, how="sum"):
#Do some stuff before
my_series.resample('5Min' how=how)
如何使用新的API实现这一点?我希望my_func
能够用不同的归约方法调用重采样方法。
一个答案已经涵盖了"如何"只是一个聚合函数的情况。我想到了更多我们想要执行上采样的情况。
例如:
#Old API:
ts.resample('250L', fill_method='ffill')
#New API
ts.resample('250L').ffill()
注意,在我的真实代码上,我有更接近这个的东西:
def my_func(dummy_df, freq="10Min", how="last", label="right", closed="right", fill_method="ffill"):
dummy_df.resample(freq, how=how, label=label, closed=closed, fill_method=fill_method)
并希望用新的API重新编写它。
令人困惑的是,文件仍然(2016年7月26日)有这样的行:
通过调度可用的任何函数都可以通过名称赋予how参数,包括sum、mean、std、sem、max、min、median、first、last、ohlc。
但是how
参数应该会被弃用。
具有Resampler.agg
:的解决方案
print (ts.resample('5Min').agg('sum'))
print (ts.resample('5Min').sum())
2012-01-01 24223
Freq: 5T, dtype: int32
print (ts.resample('5Min').agg('sum'))
2012-01-01 24223
Freq: 5T, dtype: int32
所以自定义功能是:
def my_func(my_series, how="sum"):
#Do some stuff before
return my_series.resample('5Min').agg(how)
print (my_func(ts))
2012-01-01 24223
Freq: 5T, dtype: int32
分离how
和fill_method
并通过getattr
:
def my_func(dummy_df, freq="10Min", how="last",
label="right", closed="right", fill_method="ffill"):
resample = dummy_df.resample(freq, label=label, closed=closed)
return getattr(getattr(resample, how)(), fill_method)()