Построение столбцов Julia DataFrame с пробелами в именах с помощью Matplotlib

У меня 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))

У 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 просто несовместим с DataFrames с пробелами в именах столбцов, и если это так, как я могу удалить все пробелы из столбцов Julia DataFrame?

РЕДАКТИРОВАТЬ

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


person SeSodesa    schedule 28.03.2019    source источник


Ответы (1)


Первый подход работает нормально, но кажется, что вы неправильно используете 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"=>""))))
person Bogumił Kamiński    schedule 28.03.2019
comment
Вы, конечно, правы, но я внес правку в свой исходный пост. Я совершенно забыл, что Matplotlib не может понимать значения missing, что вызывало ошибку №1. Изменение их на Nan устранило проблему. - person SeSodesa; 29.03.2019