Dask: создать столбец dayOfWeek из строки даты - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть кадр данных dask, dfs, со столбцом даты, IR_START_DATE. Я хотел бы создать новый столбец dayofweek, используя указанный столбец даты.

Я могу добиться этого, используя следующий код:

  ddf.to_datetime(dfs['IR_START_DATE']).dt.dayofweek.compute() 

Однако у меня возникают проблемы с сохранением этогок своей собственной колонке. Например, я пробовал:

  • Назначение в качестве столбца:

    dfs['yeah'] = ddf.to_datetime(dfs['IR_START_DATE']).dt.dayofweek.compute()
    
  • Использование map_partition():

    def compute_dow(df):
        date_time = ddf.to_datetime(df['IR_START_DATE']).dt
        dow = date_time.dayofweek
        return dow
    
    dow = dfs.map_partitions(compute_dow)
    
  • Использование map():

    dfs['IR_START_DATE'].map(lambda x: ddf.to_datetime(x['IR_START_DATE']).dt.dayofweek, meta = ('time', 'datetime64[ns]')).compute()
    

Очевидно, я упускаю какой-то фундаментальный элемент dask знаний здесь, пожалуйста, укажите мне правильное направление!

1 Ответ

0 голосов
/ 01 ноября 2019

Ваши первые два метода были очень близки!

Это должно сработать:

dfs['yeah'] = ddf.to_datetime(dfs['IR_START_DATE']).dt.dayofweek

Обратите внимание на отсутствие compute() - вы не хотите создавать фрейм данных для панд, вы хотитестолбец, чтобы вернуться к исходным данным обычным ленивым способом.

Для map_partitions, вы могли бы сделать

def compute_dow(df):
    date_time = ddf.to_datetime(df['IR_START_DATE']).dt
    df['dow'] = date_time.dayofweek
    return df

Обратите внимание, что мы передаем фрейм данных и получаемобратно данные кадра. Кроме того, было бы полезно при вызове map_partitions предоставить аргумент meta=, чтобы уменьшить количество необходимых выводов (прочитайте документацию по методу).

...