Преобразование столбца строки DataFrame, содержащего отсутствующие значения, в Date в Julia

Я пытаюсь преобразовать столбец DataFrame String в формат Date в Julia, но если столбец содержит отсутствующие значения, возникает ошибка:

ERROR: MethodError: no method matching Int64(::Missing)

Код, который я пытался запустить (который работает для столбцов без отсутствующих данных):

df_pp[:tod] = Date.(df_pp[:tod], DateFormat("d/m/y"));

Другие строки кода, которые я пробовал:

df_pp[:tod] = Date.(passmissing(df_pp[:tod]), DateFormat("d/m/y"));
df_pp[.!ismissing.(df_pp[:tod]), :tod] = Date.(df_pp[:tod], DateFormat("d/m/y"));

Код относится к столбцу с именем tod во фрейме данных с именем df_pp. Оба пакета DataFrames и Dates были загружены перед попыткой этого.

Работа с датами и временем в языке Java
Работа с датами и временем в языке Java
Работа с датами и временем в языке Java была сильно переработана начиная с версии Java 8 и далее с появлением библиотеки java.time.
5
0
580
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

passmissing способ

df_pp.tod = passmissing(x->Date(x, DateFormat("d/m/y"))).(df_pp.tod)

Здесь происходит следующее: passmissing принимает функцию и возвращает новую функцию, которая обрабатывает missings (возвращая missing). Внутри скобок в x->Date(x, DateFormat("d/m/y")) я определяю новую анонимную функцию, которая вызывает функцию Date с соответствующим DateFormat. Наконец, я использую функцию, возвращаемую passmissing, сразу на df_pp.tod, используя . для трансляции по столбцу. Синтаксис будет легче увидеть, если я разделю его:

myDate(x) = Date(x, DateFormat("d/m/y"))
Date_accepting_missing = passmissing(myDate)
df_pp[:tod] = Date_accepting_missing.(df_pp[:tod])

Большое спасибо. переписал это как: df_pp[:tod] = passmissing(x->Date(x, DateFormat("d/m/y"))).(df_pp[:tod]); для согласованности, но это работает! Надеюсь, скоро я буду понимать синтаксис немного лучше.

Feakster 12.06.2019 14:34

Я добавил некоторые пояснения - стало ли это яснее?

Michael K. Borregaard 12.06.2019 15:57

Другие вопросы по теме