您需要Dates 标准库。假设您有以下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")
您可以在文档字符串?DateTime 中找到更多信息。
可能存在另一种解决方案,您可以使用types 关键字选项告知 CSV.jl 正确的类型。检查文档字符串?CSV.File。