如何在 Julia 中将字符串系列转换为日期时间系列

How to convert String Series to Datetime Series in Julia

我有一个如下所示的 csv 文件,

20×2 DataFrame
│ Row │ Id    │ Date       │
│     │ Int64 │ String     │
├─────┼───────┼────────────┤
│ 1   │ 1     │ 01-01-2010 │
│ 2   │ 2     │ 02-01-2010 │
│ 3   │ 3     │ 03-01-2010 │
│ 4   │ 4     │ 04-01-2010 │
│ 5   │ 5     │ 05-01-2010 │
│ 6   │ 6     │ 06-01-2010 │
│ 7   │ 7     │ 07-01-2010 │
│ 8   │ 8     │ 08-01-2010 │
│ 9   │ 9     │ 09-01-2010 │
│ 10  │ 10    │ 10-01-2010 │
│ 11  │ 11    │ 11-01-2010 │
│ 12  │ 12    │ 12-01-2010 │
│ 13  │ 13    │ 13-01-2010 │
│ 14  │ 14    │ 14-01-2010 │
│ 15  │ 15    │ 15-01-2010 │
│ 16  │ 16    │ 16-01-2010 │
│ 17  │ 17    │ 17-01-2010 │
│ 18  │ 18    │ 18-01-2010 │
│ 19  │ 19    │ 19-01-2010 │
│ 20  │ 20    │ 20-01-2010 │

读取 csv 文件后 date 列为 String 类型。如何从外部将字符串系列转换为日期时间系列。在 Julia Data Frame docs 中没有谈论任何关于 TimeSeries 的事情。 如何从外部将系列或矢量转换为日期时间格式? 无论如何,我可以在阅读 CSV 文件时提及时间序列列吗?

读入 CSV 文件时,您可以在 CSV.jl 中指定 dateformat kwarg:

CSV.File("your_file_name.csv", dateformat="dd-mm-yyyy") |> DataFrame

另一方面,如果您的数据框称为 df,则在您的情况下将 String 转换为 Date 使用:

using Dates
df.Date = Date.(df.Date, "dd-mm-yyyy")

这是我的做法:

首先是一个转换不同字符串格式的辅助函数。

parse_date(d::AbstractString) = DateTime(d, dateformat"yyyy-mm-dd HH:MM:SS")
parse_date(v::Vector{AbstractString}) = parse_date.(v)
parse_date(v::Vector{String}) = parse_date.(v)
parse_date(v::Vector{String31}) = parse_date(String.(v))
using Pipe, TimeSeries

prices = @pipe CSV.File(filename; header = 1, delim = ",") |>
         TimeArray(_; timestamp = :Date, timeparser = parse_date)