如何在python代码中更改pd.DateOffset中的参数?

How to change the parameter in pd.DateOffset in python code?

我有两种不同类型的数据。第一个数据帧以小时为单位,第二个数据帧以分钟为单位。所以,我需要分别提前24小时和30分钟预测这个数据。但是我无法使我创建的函数适用于两种数据框。

比方说,我想将我的数据集划分为训练数据集和测试数据集。

如果我的数据以小时为单位,我需要使用函数hours

def split_data(df, tend):       
    train=df[:index-pd.DateOffset(hours=1)]
    test=df[index:index+pd.DateOffset(hours=tend-1)]

如果我的数据在几分钟内,我需要使用函数minutes

def split_data(df, tend):       
    train=df[:index-pd.DateOffset(minutes=1)]
    test=df[index:index+pd.DateOffset(minutes=tend-1)]

我已经尝试过忽略时间函数,但是未能拆分为分钟和小时数据

def split_data(df, tend):       
    train=df[:index-pd.DateOffset(1)]
    test=df[index:index+pd.DateOffset(tend-1)]

我希望该函数可以在两种数据帧上工作,我也尝试分配该函数,但失败了。

我认为您需要使用关键字参数来传递多个值,如下所示:

ts = pd.Timestamp('2017-01-01 09:10:11')
ts
Timestamp('2017-01-01 09:10:11')

ts + pd.DateOffset(months=3)
Timestamp('2017-04-01 09:10:11')

ts + pd.DateOffset(days=3)
Timestamp('2017-01-04 09:10:11')

custom_args = {"days":1, "hours":3} # pass variable number of arguments
ts + pd.DateOffset(**custom_args)
Timestamp('2017-01-02 12:10:11')

custom_args = {"days":1, "hours":0}
ts + pd.DateOffset(**custom_args)
Timestamp('2017-01-02 09:10:11')

custom_args = {"days":1, "hours":0, "minutes":0}
ts + pd.DateOffset(**custom_args)
Timestamp('2017-01-02 09:10:11')

对于你的情况,你可以这样试试:

def split_data(df, tend, custom_args, unit="hours"): # or unit can be minutes  
    custom_args[unit] = 1
    train=df[:index-pd.DateOffset(**custom_args)]
    custom_args[unit] = tend - 1
    test=df[index:index+pd.DateOffset(**custom_args)]

custom_args = {"hours":0, "minutes":0, "minutes":0} # you can specify more arguments based on your requirements.
split_data(df, tend, custom_args, unit="hours")

要查看您可以传递的所有参数,请查看此 link https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.tseries.offsets.DateOffset.html