在Julia中解析CSV文件中的日期时间
我是朱莉娅的新朋友,所以我只想了解一些基本知识 我正在尝试将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 如何从字符串实例化日期
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