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

时间:2019-05-21 02:33:12

标签: python datetimeoffset

我有两种不同类型的数据。第一个数据帧以小时为单位,第二个数据帧以分钟为单位。因此,我需要分别提前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)]

我希望该功能可以同时在两种数据帧中使用,我也尝试分配该功能,但失败了。

1 个答案:

答案 0 :(得分: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")

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