我正在尝试在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
的列相关。尝试执行此操作之前,已经加载了DataFrames
和Dates
软件包。
答案 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])