Dataprep изменяет дату str yyyymmdd на столбец datetime

У меня есть столбец с датами (в строковом формате) в Dataprep: ггггммдд. Я хотел бы, чтобы он стал объектом datetime. Какую функцию/преобразование следует применить для автоматического достижения этого результата?


person JohnAndrews    schedule 24.06.2019    source источник


Ответы (1)


В этом случае вам вообще не нужно применять преобразование — вы можете просто изменить тип столбца на «Дата/время» и выбрать соответствующие параметры формата.

Примечание. Это одна из наименее интуитивно понятных частей Dataprep, поскольку вам нужно выбрать неправильный формат (в данном случае yy-mm-dd), прежде чем вы сможете перейти к правильный формат (yyyymmdd).

Вот скриншот окна типа Дата/Время, иллюстрирующий это: Диалоговое окно выбора типа даты/времени Google Cloud Dataprep, показывающее выбранный тип гг-мм-дд и подтип ггггммдд

Хотя это неинтуитивно, это позволит правильно обрабатывать столбец как дату в будущих операциях, включая назначение правильного типа в операциях экспорта (например, BigQuery).

Через пользовательский интерфейс это сгенерирует следующий сценарий Wrangle:

settype col: YourDateCol customType: 'Datetime','yy-mm-dd','yyyymmdd' type: custom

Согласно документации, это также должно работать (и более кратко). ):

settype col: YourDateCol type: 'Datetime','yy-mm-dd','yyyymmdd'

Обратите внимание: если вам абсолютно необходимо сделать это в контексте функции, вы можете извлечь части даты, используя SUBSTRING/LEFT/RIGHT и передать их в файл DATE или DATETIME для создания объекта datetime. Как вы, наверное, уже заметили, DATEFORMAT вернет NULL, если исходный столбец еще не имеет тип Datetime.

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

person justbeez    schedule 24.06.2019
comment
Спасибо тебе за это. Действительно неинтуитивно, поскольку я видел этот список, но не мог найти свой вариант. Где мы можем получить доступ к исходному сценарию Wrangle элементов библиотеки? Причина, по которой я спрашиваю, заключается в том, что я хотел бы, чтобы определенные наборы данных всегда имели один и тот же сценарий Wrangle, а не меняли его каждый раз, когда я помещаю его в поток (например, первая строка = заголовок, удалить строки, в которых даты не совпадают, и применить вышеуказанную операцию) - person JohnAndrews; 25.06.2019
comment
@JohnAndrews Это может быть лучше подано как отдельный вопрос SO, чтобы я мог публиковать изображения, но суть в том, что вы можете загрузить сценарий рецепта, щелкнув значок ... (Дополнительно) в правом верхнем углу панели рецептов, а затем выбрав Загрузить рецепт как спор. Вы также можете скопировать сценарий обработки для любого отдельного элемента, щелкнув значок ... (Дополнительно), который появляется при наведении курсора, и выбрав Копировать в буфер обмена. Затем это можно применить к любому другому рецепту, нажав «Новый шаг» и вставив его из буфера обмена (что позволит воссоздать шаг в интерфейсе). - person justbeez; 25.06.2019
comment
@JohnAndrews У меня также есть поток под названием !TEMPLATES, где я храню общие базовые рецепты, как вы описали. Когда они мне нужны, я щелкаю ... рядом с ними и выбираю Сделать копию › Без ввода, чтобы клонировать его, а затем на копии щелкаю то же ... меню и выбираю Переместить..., что вызывает диалоговое окно, позволяющее вам переместить рецепт в другой поток или создать новый поток. Хотя это не так безболезненно, как должно быть, я считаю, что это быстрее, чем создавать рецепты шаг за шагом (вставляя строки из загруженного скрипта спора). - person justbeez; 25.06.2019