Построение столбцов Julia DataFrame с пробелами в именах с помощью Matplotlib - PullRequest
0 голосов
/ 28 марта 2019

У меня есть DataFrames с пробелами в именах столбцов, потому что файлы CSV, из которых они были сгенерированы, также имели пробелы в именах. DataFrame s были сгенерированы со строками

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", но ни одно из следующих выражений не работает, когда я пытаюсь получить доступ к столбцу (здесь 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 просто несовместимым с DataFrame s с пробелами в именах столбцов, и если это так, как я могу удалить все пробелы из столбцов Julia DataFrame?

EDIT

Я забыл упомянуть один очень важный момент: DataFrame содержит missing значений, которые Matplotlib не может понять. Это приводило к ошибке 1. Мне все еще очень хотелось бы узнать, есть ли способ избавиться от каких-либо пробелов в именах столбцов таблицы, возможно, во время создания DataFrame.

1 Ответ

1 голос
/ 28 марта 2019

Первый подход работает просто отлично, но, похоже, вы неправильно используете 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>

и график отображается как ожидалось.

EDIT

Если вы хотите удалить пробелы из имен столбцов фрейма данных df, напишите:

names!(df, Symbol.(replace.(string.(names(df)), Ref(r"\s"=>""))))
...