用变量中的方法对熊猫进行重新采样



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

分离howfill_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)()

相关内容

  • 没有找到相关文章

最新更新