与Julia一起使用DateTime函数的问题

时间:2018-02-10 21:58:50

标签: function datetime jupyter-notebook julia

当我在Jupyter笔记本中读取csv文件时,我得到了以下输出

54×9 Array{Any,2}:
 "\"25 Nov 2015\""  28637  11314  3804  2536  10675    4808    14122    3955  
 "\"18 Nov 2015\""  28634  11314  3804  2536  10672    4808    14122    3955  
 "\"11 Nov 2015\""  28635  11314  3805  2536  10672    4808    14122    3955  
 "\"4 Nov 2015\""   28607  11314  3810  2536  10672    4808    14089    3955  
 "\"25 Oct 2015\""  28539  11298  3806  2535  10672    4808    14061    3955  
 ⋮                                                ⋮                           
 "\"12 May 2014\""    260    182   248   171     12      11         ""      ""
 "\"1 May 2014\""     239    160   226   149     13      11         ""      ""
 "\"14 Apr 2014\""    176    110   168   108      8       2         ""      ""
 "\"31 Mar 2014\""    130     82   122    80      8       2         ""      ""
 "\"22 Mar 2014\""     49     29    49    29       ""      ""       ""      ""

我想将第一列内容更改为日 - 月 - 年格式,以便计算自第一次观察以来经过的年数(在这种情况下是我的最后一行)。

我尝试使用字符串转换列,然后使用for循环(假设我的文件名是" ebola"

dias = string.(ebola[:,1])

for i = 1:length(dias) 
    dias[i] = DateTime(dias[i], "d-m-y")
end

之后,我收到了此错误消息

    ArgumentError: Unable to parse date time. Expected directive DatePart(d) at char 1

我认为这个错误的产生是因为字符串有一个非传统的格式来操作它,有四个""符号和一些反斜杠:

"\"25 Nov 2015\""

我必须在输入时添加,例如:

length("\"22 Mar 2014\"")
当你可以计算17个字符时,

结果是13,所以反斜杠会产生一些"噪音"。

为了执行我想要执行的任务,我还能以什么格式转换字符串? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

原因是"\"22 Mar 2014\""是一个包含"个字符的字符串。您可以通过打印来检查它:

julia> s = "\"22 Mar 2014\""
"\"22 Mar 2014\""

julia> print(s)
"22 Mar 2014"

为了解析日期,请使用正确的格式字符串,例如:

julia> Date(s,"\"d u y\"")
2014-03-22

以下是如何从阵列执行转换:

julia> x = ["\"25 Nov 2015\""  28637  11314  3804  2536  10675    4808    14122    3955
            "\"18 Nov 2015\""  28634  11314  3804  2536  10672    4808    14122    3955
            "\"11 Nov 2015\""  28635  11314  3805  2536  10672    4808    14122    3955
            "\"4 Nov 2015\""   28607  11314  3810  2536  10672    4808    14089    3955
            "\"25 Oct 2015\""  28539  11298  3806  2535  10672    4808    14061    3955]
5×9 Array{Any,2}:
 "\"25 Nov 2015\""  28637  11314  3804  2536  10675  4808  14122  3955
 "\"18 Nov 2015\""  28634  11314  3804  2536  10672  4808  14122  3955
 "\"11 Nov 2015\""  28635  11314  3805  2536  10672  4808  14122  3955
 "\"4 Nov 2015\""   28607  11314  3810  2536  10672  4808  14089  3955
 "\"25 Oct 2015\""  28539  11298  3806  2535  10672  4808  14061  3955

julia> Date.(x[:,1], "\"d u y\"")
5-element Array{Date,1}:
 2015-11-25
 2015-11-18
 2015-11-11
 2015-11-04
 2015-10-25