使用 Matplotlib 绘制名称中包含空格的 Julia DataFrame 列
Plotting Julia DataFrame columns that have whitespace in their names with Matplotlib
我 DataFrames
的列名中有空格,因为生成它们的 CSV 文件的名称中也有空格。 DataFrame
是用行
生成的
csvnames::Array{String,1} = filter(x -> endswith(x, ".csv"), readdir(CSV_DIR))
dfs::Dict{String, DataFrame} = Dict( csvnames[i] => CSV.File(CSV_DIR * csvnames[i]) |> DataFrame for i in 1:length(csvnames))
DataFrame
的列名如“Tehtävä 1”,但当我尝试访问该列时,以下表达式的 none 有效(此处 ecols
是数据框):
plot = axes.plot(ecols[Symbol("Tehtävä 1")])
产生错误 TypeError("float() argument must be a string or a number, not 'PyCall.jlwrap'")
plot = axes.plot(ecols[:Tehtävä_1])
产生错误 ERROR: LoadError: ArgumentError: column name :Tehtävä_1 not found in the data frame; existing most similar names are: :Tehtävä 1
plot = axes.plot(ecols[:Tehtävä 1])
引发错误 ERROR: LoadError: MethodError: no method matching typed_hcat(::DataFrame, ::Symbol, ::Int64)
因此,我似乎无法绘制名称中包含空格的 DataFrame
列。打印它们效果很好,因为行
println(ecols[Symbol("Tehtävä 1")])
生成浮点数数组:[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
,这是应该的。 Matplotlib 是否与 DataFrame
的列名中有空格不兼容?如果是,我如何从 Julia DataFrame
的列中删除所有空格?
编辑
我忘了提一个非常关键的点:DataFrame
包含 missing
值,Matplotlib 无法理解。这导致了错误 1。我仍然非常想知道是否有办法去除 table 列名称中的任何空格,可能是在 DataFrame
.[=29 的构造过程中=]
第一种方法工作得很好,但似乎您没有正确使用 PyPlot.jl(特别是您尝试创建一个名为 plot
的变量,它将掩盖 plot
函数PyPlot.jl).
看看它是否有效 运行:
julia> df = DataFrame(Symbol("Tehtävä 1") => 1.0:5.0)
5×1 DataFrame
│ Row │ Tehtävä 1 │
│ │ Float64 │
├─────┼───────────┤
│ 1 │ 1.0 │
│ 2 │ 2.0 │
│ 3 │ 3.0 │
│ 4 │ 4.0 │
│ 5 │ 5.0 │
julia> plot(df[Symbol("Tehtävä 1")])
1-element Array{PyCall.PyObject,1}:
PyObject <matplotlib.lines.Line2D object at 0x000000003F9EE0B8>
并按预期显示了一个图。
编辑
如果你想从数据框的列名中删除空格df
写:
names!(df, Symbol.(replace.(string.(names(df)), Ref(r"\s"=>""))))
我 DataFrames
的列名中有空格,因为生成它们的 CSV 文件的名称中也有空格。 DataFrame
是用行
csvnames::Array{String,1} = filter(x -> endswith(x, ".csv"), readdir(CSV_DIR))
dfs::Dict{String, DataFrame} = Dict( csvnames[i] => CSV.File(CSV_DIR * csvnames[i]) |> DataFrame for i in 1:length(csvnames))
DataFrame
的列名如“Tehtävä 1”,但当我尝试访问该列时,以下表达式的 none 有效(此处 ecols
是数据框):
plot = axes.plot(ecols[Symbol("Tehtävä 1")])
产生错误TypeError("float() argument must be a string or a number, not 'PyCall.jlwrap'")
plot = axes.plot(ecols[:Tehtävä_1])
产生错误ERROR: LoadError: ArgumentError: column name :Tehtävä_1 not found in the data frame; existing most similar names are: :Tehtävä 1
plot = axes.plot(ecols[:Tehtävä 1])
引发错误ERROR: LoadError: MethodError: no method matching typed_hcat(::DataFrame, ::Symbol, ::Int64)
因此,我似乎无法绘制名称中包含空格的 DataFrame
列。打印它们效果很好,因为行
println(ecols[Symbol("Tehtävä 1")])
生成浮点数数组:[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
,这是应该的。 Matplotlib 是否与 DataFrame
的列名中有空格不兼容?如果是,我如何从 Julia DataFrame
的列中删除所有空格?
编辑
我忘了提一个非常关键的点:DataFrame
包含 missing
值,Matplotlib 无法理解。这导致了错误 1。我仍然非常想知道是否有办法去除 table 列名称中的任何空格,可能是在 DataFrame
.[=29 的构造过程中=]
第一种方法工作得很好,但似乎您没有正确使用 PyPlot.jl(特别是您尝试创建一个名为 plot
的变量,它将掩盖 plot
函数PyPlot.jl).
看看它是否有效 运行:
julia> df = DataFrame(Symbol("Tehtävä 1") => 1.0:5.0)
5×1 DataFrame
│ Row │ Tehtävä 1 │
│ │ Float64 │
├─────┼───────────┤
│ 1 │ 1.0 │
│ 2 │ 2.0 │
│ 3 │ 3.0 │
│ 4 │ 4.0 │
│ 5 │ 5.0 │
julia> plot(df[Symbol("Tehtävä 1")])
1-element Array{PyCall.PyObject,1}:
PyObject <matplotlib.lines.Line2D object at 0x000000003F9EE0B8>
并按预期显示了一个图。
编辑
如果你想从数据框的列名中删除空格df
写:
names!(df, Symbol.(replace.(string.(names(df)), Ref(r"\s"=>""))))