Юлия конвертирует типы столбцов данных - PullRequest
2 голосов
/ 24 марта 2020

Никаких предварительных знаний Джулии, пытающихся вписать какой-либо фрейм данных в функцию пакета MixedModels

using CSV
data = CSV.read("some_file.csv")
typeof(data.log_volume)

Запуск этого кода, где log_volume - это переменная чисел с плавающей запятой, которые я получаю следующим:

julia> typeof(data.log_volume)
CSV.Column{Float64,Float64}

Я хочу прочитать данные из CSV-файла (или преобразовать данные, полученные указанным выше методом), чтобы получить следующий ответ:

julia> typeof(data.log_volume)
Array{Float64,1}

Еще раз, я понятия не имею, как работают типы в Julia. Я вижу, что мне нужен какой-то способ преобразования данных или другой метод чтения данных из .csv. Фрейм данных большой, например, 83 тыс. Наблюдений и 80 переменных.

1 Ответ

3 голосов
/ 24 марта 2020

Вы должны использовать:

DataFrame(CSV.File("some_file.csv"))

в вашем случае.

Теперь, чтобы объяснить, что происходит, посмотрите на справку CSV.read:

help?> CSV.read
  CSV.read(source; copycols::Bool=false, kwargs...) => DataFrame

  Parses a delimited file into a DataFrame. copycols determines whether a copy of columns should be made when creating the DataFrame; by default, no copy
  is made, and the DataFrame is built with immutable, read-only CSV.Column vectors. If mutable operations are needed on the DataFrame columns, set
  copycols=true.

  CSV.read supports the same keyword arguments as CSV.File.

Как видите, CSV.read использует специальный формат типа внутреннего столбца для повышения производительности (с недостатком в том, что он неизменен и нестандартен).

Причина, по которой я рекомендую использовать DataFrame(CSV.File("some_file.csv")) чем CSV.File("some_file.csv", copycols=true) в том, что в будущем, вероятно, CSV.read функция может быть удалена из пакета, поэтому использование CSV.File является безопасным для будущего подходом.

...