Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 传递向量或数据帧列字符串日期转换为日期格式_Julia - Fatal编程技术网

Julia 传递向量或数据帧列字符串日期转换为日期格式

Julia 传递向量或数据帧列字符串日期转换为日期格式,julia,Julia,我已在Julia中将数据加载到.csv中 我希望将字符串日期转换为日期格式: julia> head(df) 6×7 DataFrames.DataFrame │ Row │ Date │ Open │ High │ Low │ Close │ Adj_Close │ Volume │ ├─────┼────────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┤ │

我已在Julia中将数据加载到.csv中

我希望将字符串日期转换为日期格式:

julia> head(df)
6×7 DataFrames.DataFrame
│ Row │ Date       │ Open    │ High    │ Low     │ Close   │ Adj_Close │ Volume  │
├─────┼────────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┤
│ 1   │ 1993-01-29 │ 43.9687 │ 43.9687 │ 43.75   │ 43.9375 │ 27.6073   │ 1003200 │
│ 2   │ 1993-02-01 │ 43.9687 │ 44.25   │ 43.9687 │ 44.25   │ 27.8036   │ 480500  │
│ 3   │ 1993-02-02 │ 44.2187 │ 44.375  │ 44.125  │ 44.3437 │ 27.8625   │ 201300  │
│ 4   │ 1993-02-03 │ 44.4062 │ 44.8437 │ 44.375  │ 44.8125 │ 28.1571   │ 529400  │
│ 5   │ 1993-02-04 │ 44.9687 │ 45.0937 │ 44.4687 │ 45.0    │ 28.2749   │ 531500  │
│ 6   │ 1993-02-05 │ 44.9687 │ 45.0625 │ 44.7187 │ 44.9687 │ 28.2552   │ 492100  │
类型为:

julia> showcols(df)
6258×7 DataFrames.DataFrame
│ Col # │ Name      │ Eltype                           │ Missing │ Values                    │
├───────┼───────────┼──────────────────────────────────┼─────────┼───────────────────────────┤
│ 1     │ Date      │ Union{Missings.Missing, String}  │ 0       │ 1993-01-29  …  2017-12-01 │
│ 2     │ Open      │ Union{Float64, Missings.Missing} │ 0       │ 43.9687  …  264.76        │
│ 3     │ High      │ Union{Float64, Missings.Missing} │ 0       │ 43.9687  …  265.31        │
│ 4     │ Low       │ Union{Float64, Missings.Missing} │ 0       │ 43.75  …  260.76          │
│ 5     │ Close     │ Union{Float64, Missings.Missing} │ 0       │ 43.9375  …  264.46        │
│ 6     │ Adj_Close │ Union{Float64, Missings.Missing} │ 0       │ 27.6073  …  264.46        │
│ 7     │ Volume    │ Union{Int64, Missings.Missing}   │ 0       │ 1003200  …  159947700     │
现在日期是一个字符串

因此,我们希望将该列转换为日期格式

尝试:

df[:Date, DateFormat("yyyy-mm-dd")]

有误:

MethodError:无法
将类型为DateFormat{Symbol(“yyyy mm dd”)、元组{Base.Dates.DatePart{y'}、Base.Dates.Delim{Char,1}、Base.Dates.DatePart{m'}、Base.Dates.Delim{Char 1}、Base.Dates.DatePart{d'}的对象转换为字符串类型的对象
这可能是由于调用构造函数字符串(…),
因为类型构造函数会退回到转换方法。
在setindex中!在DataFrames\src\dataframe\dataframe.jl:376
填满!在底部\多维.jl:841
答复

encase我的语法错误我从date列生成一个向量x:

x = df[:Date]

Date(x, "yyyy-mm-dd")
MethodError:无法
类型为Array{Union{Missings.Missing,String},1}的对象转换为类型为Int64的对象
答复

这对R来说很容易,但是Julia找不到那么多信息,任何帮助都很感激

我也关注这个链接:

以下是一个例子:

julia> df = Dates.DateFormat("y-m-d");

julia> dt = Date("2015-01-01",df)
2015-01-01

julia> dt2 = Date("2015-01-02",df)
2015-01-02
为什么我不能通过这个传递向量或数据帧列

更新:

当我从向量中传递一个元素时,这会起作用:

julia> Date(x[1], Dates.DateFormat("yyyy-mm-dd"))
1993-01-29
我只想将每个元素转换成这种格式并存储在数据框中

只需编写
Date.(x,Dates.DateFormat(“yyyy-mm-dd”)
即可获得所需内容

请注意
日期之后的
-它告诉Julia将
日期
函数应用于
x
日期的所有元素。DateFormat(“yyyy-mm-dd”)
将在每次调用中重复使用,因为它是标量

细节在这里解释

作为旁注,如果您使用最新版本的CSV.jl软件包,则它应自动检测<代码>日期类型:

julia> data="""Date,Open,High,Low,Close,Adj_Close,Volume
       1993-01-29,43.9687,43.9687,43.75,43.9375,27.6073,1003200
       1993-02-01,43.9687,44.25,43.9687,44.25,27.8036,480500
       1993-02-02,44.2187,44.375,44.125 ,44.3437,27.8625,201300"""
"Date,Open,High,Low,Close,Adj_Close,Volume\n1993-01-29,43.9687,43.9687,43.75,43.9375,27.6073,1003200\n1993-02-01,43.9687,44.25,43.9687,44.25,27.8036,480500\n1993-02-02,44.2187,44.375,44.125 ,44.3437,27.8625,201300"

julia> showcols(CSV.read(IOBuffer(data)))
3×7 DataFrames.DataFrame
│ Col # │ Name      │ Eltype                           │ Missing │ Values                    │
├───────┼───────────┼──────────────────────────────────┼─────────┼───────────────────────────┤
│ 1     │ Date      │ Union{Date, Missings.Missing}    │ 0       │ 1993-01-29  …  1993-02-02 │
│ 2     │ Open      │ Union{Float64, Missings.Missing} │ 0       │ 43.9687  …  44.2187       │
│ 3     │ High      │ Union{Float64, Missings.Missing} │ 0       │ 43.9687  …  44.375        │
│ 4     │ Low       │ Union{Float64, Missings.Missing} │ 0       │ 43.75  …  44.125          │
│ 5     │ Close     │ Union{Float64, Missings.Missing} │ 0       │ 43.9375  …  44.3437       │
│ 6     │ Adj_Close │ Union{Float64, Missings.Missing} │ 0       │ 27.6073  …  27.8625       │
│ 7     │ Volume    │ Union{Int64, Missings.Missing}   │ 0       │ 1003200  …  201300        │
即使不需要,您也可以传递
类型
参数(在下面的示例中,如果您出于某种原因不希望使用
缺失
,它可以避免与该参数的联合):


编辑:在DataFrames.jl版本0.14或更高版本下,使用
description
而不是
showcols

以下是我的想法:

# Pull date column and store in vector
    x = df[:Date]

    # loop to iterate through each element in vector, converting to Date format 
    v = []
    for i in 1:length(x)
        z = Date(x[i], Dates.DateFormat("yyyy-mm-dd"))
        push!(v,z)
    end

    # Check format 
    julia> v[1] - v[3]
    -4 days

    # cbind() R equivalent hcat() to existing data frame
    df = hcat(df,v)

With the output:


    julia> head(df)
    6×8 DataFrames.DataFrame
    │ Row │ Date       │ Open    │ High    │ Low     │ Close   │ Adj_Close │ Volume  │ x1         │
    ├─────┼────────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼────────────┤
    │ 1   │ 1993-01-29 │ 43.9687 │ 43.9687 │ 43.75   │ 43.9375 │ 27.6073   │ 1003200 │ 1993-01-29 │
    │ 2   │ 1993-02-01 │ 43.9687 │ 44.25   │ 43.9687 │ 44.25   │ 27.8036   │ 480500  │ 1993-02-01 │
    │ 3   │ 1993-02-02 │ 44.2187 │ 44.375  │ 44.125  │ 44.3437 │ 27.8625   │ 201300  │ 1993-02-02 │
    │ 4   │ 1993-02-03 │ 44.4062 │ 44.8437 │ 44.375  │ 44.8125 │ 28.1571   │ 529400  │ 1993-02-03 │
    │ 5   │ 1993-02-04 │ 44.9687 │ 45.0937 │ 44.4687 │ 45.0    │ 28.2749   │ 531500  │ 1993-02-04 │
    │ 6   │ 1993-02-05 │ 44.9687 │ 45.0625 │ 44.7187 │ 44.9687 │ 28.2552   │ 492100  │ 1993-02-05 │

如果不使用
hcat
,可能更简单的方法是
df[:newdate]=v
。另外,vector
v
具有类型
vector{Any}
,您可能需要一个类型
vector{Date}
,在这种情况下,您应该编写
v=Date[]
。太棒了!非常感谢。所以我在这里预先指定了类型OK很好!你能给我一个语法来直接在数据框中转换它吗?df[:Date]=Date.(df[:Date])谢谢你今天的帮助。我从R到Julia的第一次尝试:)我尝试了这个,得到了
MethodError:没有方法匹配iterate(::DataFrame)
你到底尝试了什么?问题是关于
DateFromat
而不是
DataFrames。还要注意,DataFrames.jl中现在不推荐使用
showcols',您应该使用
description
函数。我已经在答案中添加了信息。根据您发布的链接,请注意您似乎正在阅读julia v0.4中的文档。自v0.4以来发生了很多变化,例如广播运营商
在提供的(非常好的)答案中。如果你刚刚遇到julia,最好阅读标有stable的文档并使用v0.6。(虽然v0.7应该很快就准备好,并且涉及到v0.6的许多更改-但它也将与v1.0兼容,因此应该是用户多年来必须处理的最后一大组突破性更改)。好的,很好-感谢您指出这一点。许多谷歌搜索导致了v.04。干杯,安德鲁
julia> showcols(CSV.read(IOBuffer(data), types=[String; fill(Float64, 5); Int]))
3×7 DataFrames.DataFrame
│ Col # │ Name      │ Eltype  │ Missing │ Values                    │
├───────┼───────────┼─────────┼─────────┼───────────────────────────┤
│ 1     │ Date      │ String  │ 0       │ 1993-01-29  …  1993-02-02 │
│ 2     │ Open      │ Float64 │ 0       │ 43.9687  …  44.2187       │
│ 3     │ High      │ Float64 │ 0       │ 43.9687  …  44.375        │
│ 4     │ Low       │ Float64 │ 0       │ 43.75  …  44.125          │
│ 5     │ Close     │ Float64 │ 0       │ 43.9375  …  44.3437       │
│ 6     │ Adj_Close │ Float64 │ 0       │ 27.6073  …  27.8625       │
│ 7     │ Volume    │ Int64   │ 0       │ 1003200  …  201300        │
# Pull date column and store in vector
    x = df[:Date]

    # loop to iterate through each element in vector, converting to Date format 
    v = []
    for i in 1:length(x)
        z = Date(x[i], Dates.DateFormat("yyyy-mm-dd"))
        push!(v,z)
    end

    # Check format 
    julia> v[1] - v[3]
    -4 days

    # cbind() R equivalent hcat() to existing data frame
    df = hcat(df,v)

With the output:


    julia> head(df)
    6×8 DataFrames.DataFrame
    │ Row │ Date       │ Open    │ High    │ Low     │ Close   │ Adj_Close │ Volume  │ x1         │
    ├─────┼────────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼────────────┤
    │ 1   │ 1993-01-29 │ 43.9687 │ 43.9687 │ 43.75   │ 43.9375 │ 27.6073   │ 1003200 │ 1993-01-29 │
    │ 2   │ 1993-02-01 │ 43.9687 │ 44.25   │ 43.9687 │ 44.25   │ 27.8036   │ 480500  │ 1993-02-01 │
    │ 3   │ 1993-02-02 │ 44.2187 │ 44.375  │ 44.125  │ 44.3437 │ 27.8625   │ 201300  │ 1993-02-02 │
    │ 4   │ 1993-02-03 │ 44.4062 │ 44.8437 │ 44.375  │ 44.8125 │ 28.1571   │ 529400  │ 1993-02-03 │
    │ 5   │ 1993-02-04 │ 44.9687 │ 45.0937 │ 44.4687 │ 45.0    │ 28.2749   │ 531500  │ 1993-02-04 │
    │ 6   │ 1993-02-05 │ 44.9687 │ 45.0625 │ 44.7187 │ 44.9687 │ 28.2552   │ 492100  │ 1993-02-05 │