【问题标题】:Plotting Julia DataFrame columns that have whitespace in their names with Matplotlib使用 Matplotlib 绘制名称中包含空格的 Julia DataFrame 列
【发布时间】:2019-03-29 06:05:49
【问题描述】:

我有 DataFrames 的列名中有空格,因为它们生成的 CSV 文件的名称中也有空格。 DataFrames 是用这些行生成的

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))

DataFrames 具有诸如“Tehtävä 1”之类的列名,但是当我尝试访问该列时,以下表达式都不起作用(这里 ecols 是一个数据框):

  1. plot = axes.plot(ecols[Symbol("Tehtävä 1")]) 产生错误TypeError("float() argument must be a string or a number, not 'PyCall.jlwrap'")

  2. 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

  3. 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 是否与列名中带有空格的DataFrames 不兼容,如果是,我怎么能从 Julia DataFrame 的列中删除所有空格?

编辑

我忘了提到一个非常关键的点:DataFrame 包含 missing 值,这是 Matplotlib 无法理解的。这导致了错误 1。我仍然非常想知道是否有办法摆脱表列名称中的任何空格,可能是在构造 DataFrame 期间。

【问题讨论】:

    标签: dataframe matplotlib julia compatibility removing-whitespace


    【解决方案1】:

    第一种方法效果很好,但您似乎没有正确使用 PyPlot.jl(特别是您尝试创建一个名为 plot 的变量,这将掩盖来自 PyPlot.jl 的 plot 函数)。

    要查看它是否有效,请运行:

    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"=>""))))
    

    【讨论】:

    • 当然,您是对的,但我对原始帖子进行了编辑。我完全忘记了,Matplotlib 无法理解 missing 值,这导致了错误 #1。将这些更改为 Nan 消除了问题。
    猜你喜欢
    • 2019-10-08
    • 2014-08-31
    • 2012-09-30
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    相关资源
    最近更新 更多