gpt4 book ai didi

dataframe - 如何在 Julia 中 reshape 和绘制 DataFrame?

转载 作者:行者123 更新时间:2023-12-04 10:21:30 25 4
gpt4 key购买 nike

我正在寻找一种将 DataFrame 从宽到长 reshape 然后绘制结果的方法(这应该是一个简单的操作,但我是 Julia 的新手,而不是任何专业的程序员)。

具体来说,我有一个具有以下结构的数据框:

julia> df = DataFrame(Country = ["Italy","France","Germany"], Date1 = [1,4,6], Date2 = [2,5,9], Date3 = [4,3,12])
3×4 DataFrame
│ Row │ Country │ Date1 │ Date2 │ Date3 │
│ │ String │ Int64 │ Int64 │ Int64 │
├─────┼─────────┼───────┼───────┼───────┤
│ 1 │ Italy │ 1 │ 2 │ 4 │
│ 2 │ France │ 4 │ 5 │ 3 │
│ 3 │ Germany │ 6 │ 9 │ 12 │

我已经成功使用了 stack() reshape 数据的函数如下:
julia> df_long = stack(df,2:4)
9×3 DataFrame
│ Row │ variable │ value │ Country │
│ │ Symbol │ Int64 │ String │
├─────┼──────────┼───────┼─────────┤
│ 1 │ Date1 │ 1 │ Italy │
│ 2 │ Date1 │ 4 │ France │
│ 3 │ Date1 │ 6 │ Germany │
│ 4 │ Date2 │ 2 │ Italy │
│ 5 │ Date2 │ 5 │ France │
│ 6 │ Date2 │ 9 │ Germany │
│ 7 │ Date3 │ 4 │ Italy │
│ 8 │ Date3 │ 3 │ France │
│ 9 │ Date3 │ 12 │ Germany │

现在我想用 variable 创建一个情节x 轴上的列和 value y 轴上的列。但是, variable column 的类型是 Symbol(而不是我希望的 String),所以我无法绘制它。我用来创建情节的代码是这样的:
julia> Plots.plot(df_long.variable,df_long.value)
ERROR: Cannot convert Symbol to series data for plotting
Stacktrace:
[1] prepareSeriesData(::Symbol) at /Users/kayvon/.julia/packages/Plots/12uaJ/src/series.jl:14
[2] convertToAnyVector(::Symbol, ::Dict{Symbol,Any}) at /Users/kayvon/.julia/packages/Plots/12uaJ/src/series.jl:27
[3] (::Plots.var"#152#155"{Dict{Symbol,Any}})(::Symbol) at ./none:0
[4] iterate(::Base.Generator{Array{Symbol,1},Plots.var"#152#155"{Dict{Symbol,Any}}}) at ./generator.jl:47
[5] convertToAnyVector(::Array{Symbol,1}, ::Dict{Symbol,Any}) at /Users/kayvon/.julia/packages/Plots/12uaJ/src/series.jl:42
[6] macro expansion at /Users/kayvon/.julia/packages/Plots/12uaJ/src/series.jl:130 [inlined]
[7] apply_recipe(::Dict{Symbol,Any}, ::Type{Plots.SliceIt}, ::Array{Symbol,1}, ::Array{Int64,1}, ::Nothing) at /Users/kayvon/.julia/packages/RecipesBase/G4s6f/src/RecipesBase.jl:279
[8] _process_userrecipes(::Plots.Plot{Plots.GRBackend}, ::Dict{Symbol,Any}, ::Tuple{Array{Symbol,1},Array{Int64,1}}) at /Users/kayvon/.julia/packages/Plots/12uaJ/src/pipeline.jl:85
[9] _plot!(::Plots.Plot{Plots.GRBackend}, ::Dict{Symbol,Any}, ::Tuple{Array{Symbol,1},Array{Int64,1}}) at /Users/kayvon/.julia/packages/Plots/12uaJ/src/plot.jl:178
[10] #plot#138(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(plot), ::Array{Symbol,1}, ::Vararg{Any,N} where N) at /Users/kayvon/.julia/packages/Plots/12uaJ/src/plot.jl:57
[11] plot(::Array{Symbol,1}, ::Array{Int64,1}) at /Users/kayvon/.julia/packages/Plots/12uaJ/src/plot.jl:51
[12] top-level scope at none:0

有没有办法使用 stack()这导致 variable类型为 String 的列?还是我以错误的方式解决这个问题/有更简单的方法?

谢谢你,我很感激你能给的任何帮助!

最佳答案

plot(String.(df_long.variable),df_long.value)

注意点 . ,这是 Julia 的点运算符,用于转换 Symbol 的整个向量s 到 String 的向量s。

但是对于这些数据,您可能更喜欢散点图。
scatter(String.(df_long.variable),df_long.value)

关于dataframe - 如何在 Julia 中 reshape 和绘制 DataFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60823615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com