我是 Julia 的新手,所以只是了解基础知识。
我正在尝试将 CSV 文件读入 DataFrame:
abc = CSV.File("ABC.csv")
Run Code Online (Sandbox Code Playgroud)
格式如下:
2016-01-04T14:16:00Z,103.71,103.71,103.71,103.71,23300
Run Code Online (Sandbox Code Playgroud)
我原本期望 Julia 能够识别 ISO8601 时间戳并将其解析为DateTime,但它似乎并没有做到这一点。结果typeof是String.
因此,我的问题有两个:
您需要Dates标准库。假设您有以下ABC.csv文件:
datetime,x,y,z,w,n\n2016-01-04T14:16:00Z,103.71,103.71,103.71,103.71,23300\nRun Code Online (Sandbox Code Playgroud)\n您已经知道如何阅读它:
\njulia> using CSV\n\njulia> csv = CSV.File("ABC.csv")\n1-element CSV.File{false}:\n CSV.Row: (datetime = "2016-01-04T14:16:00Z", x = 103.71, y = 103.71, z = 103.71, w = 103.71, n = 23300)\nRun Code Online (Sandbox Code Playgroud)\n请注意,您可以使用以下方式访问列:
\njulia> csv.datetime\n1-element PooledArrays.PooledVector{String, UInt32, Vector{UInt32}}:\n "2016-01-04T14:16:00Z"\nRun Code Online (Sandbox Code Playgroud)\n此格式并不完全是默认支持的 ISO 格式。您可以使用以下方法将其转换为日期时间对象:
\njulia> using Dates\n\njulia> DateTime(csv.datetime[1], "yyyy-mm-ddTHH:MM:SSZ")\n2016-01-04T14:16:00\nRun Code Online (Sandbox Code Playgroud)\n现在我们知道如何转换列的单个条目,我们可以使用 Julia 的广播语法来应用于所有条目:
\njulia> DateTime.(csv.datetime, "yyyy-mm-ddTHH:MM:SSZ")\n1-element Vector{DateTime}:\n 2016-01-04T14:16:00\nRun Code Online (Sandbox Code Playgroud)\n然后,您可以将结果列保存在新表中。在 Julia 中,CSV.jl 表与最流行的 DataFrames.jl 表不同。您可以在开始处理管道之前轻松转换为它:
\njulia> using DataFrames\n\njulia> csv |> DataFrame\n1\xc3\x976 DataFrame\n Row \xe2\x94\x82 datetime x y z w n \n \xe2\x94\x82 String Float64 Float64 Float64 Float64 Int64 \n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 2016-01-04T14:16:00Z 103.71 103.71 103.71 103.71 23300\nRun Code Online (Sandbox Code Playgroud)\n综上所述,可以使用以下脚本来转换数据:
\nusing DataFrames\nusing Dates\nusing CSV\n\ndf = CSV.File("ABC.txt") |> DataFrame\n\ndf.datetime = DateTime.(df.datetime, "yyyy-mm-ddTHH:MM:SSZ")\nRun Code Online (Sandbox Code Playgroud)\n您可以在 docstring 中找到更多信息?DateTime。
可能存在另一种解决方案,您可以使用关键字选项告知 CSV.jl 正确的类型types。检查文档字符串?CSV.File。
| 归档时间: |
|
| 查看次数: |
919 次 |
| 最近记录: |