将包含缺失值的 DataFrame 字符串列转换为 Julia 中的日期

Fea*_*ter 5 date missing-data dataframe julia

我正在尝试将 DataFrame 字符串列转换为 Julia 中的日期格式,但如果该列包含缺失值,则会产生错误:

ERROR: MethodError: no method matching Int64(::Missing)
Run Code Online (Sandbox Code Playgroud)

我尝试运行的代码(适用于没有丢失数据的列)是:

df_pp[:tod] = Date.(df_pp[:tod], DateFormat("d/m/y"));
Run Code Online (Sandbox Code Playgroud)

我尝试过的其他代码行是:

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"));
Run Code Online (Sandbox Code Playgroud)

tod该代码与名为 的数据框中命名的列相关df_ppDataFrames在尝试此操作之前, &包均已Dates加载。

Mic*_*ard 3

方法passmissing

df_pp.tod = passmissing(x->Date(x, DateFormat("d/m/y"))).(df_pp.tod)
Run Code Online (Sandbox Code Playgroud)

这里发生的事情是这样的:passmissing接受一个函数,并返回一个处理missings 的新函数(通过返回missing)。在括号内,x->Date(x, DateFormat("d/m/y"))我定义了一个新的匿名函数,该函数使用Date适当的DateFormat. passmissing最后,我使用立即返回的函数df_pp.tod,使用 a.沿列广播。如果我把它分开,就更容易看到语法:

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