在Julia中将包含缺失值的DataFrame String列转换为Date

时间:2019-06-12 08:26:18

标签: date dataframe julia missing-data

我正在尝试在Julia中将DataFrame String列转换为Date格式,但是如果该列包含缺少的值,则会产生错误:

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的列相关。尝试执行此操作之前,已经加载了DataFramesDates软件包。

1 个答案:

答案 0 :(得分:1)

passmissing的方式是

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

这是什么情况:passmissing接受一个函数,并返回一个处理missing的新函数(返回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])