Как изменить параметр в pd.DateOffset в коде Python? - PullRequest
0 голосов
/ 21 мая 2019

У меня есть два разных типа данных. Первый кадр данных находится в почасовом режиме, а второй кадр данных - в минутах. Итак, мне нужно прогнозировать эти данные на 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 Ответ

1 голос
/ 21 мая 2019

Я думаю, что вам нужно использовать аргументы ключевых слов для передачи нескольких значений, например:

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

...