在Julia中解析CSV文件中的日期时间

在Julia中解析CSV文件中的日期时间,julia,Julia,我是朱莉娅的新朋友,所以我只想了解一些基本知识 我正在尝试将CSV文件读入数据帧: abc = CSV.File("ABC.csv") 格式如下: 2016-01-04T14:16:00Z,103.71,103.71,103.71,103.71,23300 我曾期望Julia识别ISO8601时间戳并将其解析为日期时间,但它似乎没有做到这一点。生成的typeof是String 因此,我的问题有两个: 如何让CSV.jl在导入时解析DateTime 如何从字符串实例化日期

我是朱莉娅的新朋友,所以我只想了解一些基本知识

我正在尝试将CSV文件读入数据帧:

abc = CSV.File("ABC.csv")
格式如下:

2016-01-04T14:16:00Z,103.71,103.71,103.71,103.71,23300
我曾期望Julia识别ISO8601时间戳并将其解析为
日期时间
,但它似乎没有做到这一点。生成的
typeof
String

因此,我的问题有两个:

  • 如何让CSV.jl在导入时解析DateTime
  • 如何从字符串实例化日期时间

您需要
日期
标准库。假设您有以下
ABC.csv
文件:

datetime,x,y,z,w,n
2016-01-04T14:16:00Z,103.71,103.71,103.71,103.71,23300
您已经知道如何阅读:

julia> using CSV

julia> csv = CSV.File("ABC.csv")
1-element CSV.File{false}:
 CSV.Row: (datetime = "2016-01-04T14:16:00Z", x = 103.71, y = 103.71, z = 103.71, w = 103.71, n = 23300)
请注意,您可以使用以下方式访问列:

julia> csv.datetime
1-element PooledArrays.PooledVector{String, UInt32, Vector{UInt32}}:
 "2016-01-04T14:16:00Z"
此格式不完全是默认支持的ISO格式。可以使用以下命令将其转换为日期时间对象:

julia> using Dates

julia> DateTime(csv.datetime[1], "yyyy-mm-ddTHH:MM:SSZ")
2016-01-04T14:16:00
现在我们知道了如何转换列的单个条目,可以使用Julia的广播语法应用于所有条目:

julia> DateTime.(csv.datetime, "yyyy-mm-ddTHH:MM:SSZ")
1-element Vector{DateTime}:
 2016-01-04T14:16:00
然后可以将结果列保存到新表中。在Julia中,CSV.jl表与最流行的DataFrames.jl表不同。在启动处理管道之前,您可以轻松地将其转换为:

julia> using DataFrames

julia> csv |> DataFrame
1×6 DataFrame
 Row │ datetime              x        y        z        w        n     
     │ String                Float64  Float64  Float64  Float64  Int64 
─────┼─────────────────────────────────────────────────────────────────
   1 │ 2016-01-04T14:16:00Z   103.71   103.71   103.71   103.71  23300
总之,以下脚本可用于转换数据:

using DataFrames
using Dates
using CSV

df = CSV.File("ABC.txt") |> DataFrame

df.datetime = DateTime.(df.datetime, "yyyy-mm-ddTHH:MM:SSZ")
您可以在docstring
?DateTime
中找到更多信息


如果您使用
类型
关键字选项通知CSV.jl正确的类型,则可能存在另一种解决方案。检查docstring
?CSV.File

您还可以使用
CSV.File
功能的
dateformat
选项:

julia> DataFrame(CSV.File("file.csv",dateformat="yyyy-mm-ddTHH:MM:SSZ"))
1×6 DataFrame
 Row │ datetime             x        y        z        w        n     
     │ DateTime…            Float64  Float64  Float64  Float64  Int64 
─────┼────────────────────────────────────────────────────────────────
   1 │ 2016-01-04T14:16:00   103.71   103.71   103.71   103.71  23300