Как можно загрузить только определенные c столбцы, используя CSV в Julia? - PullRequest
3 голосов
/ 21 апреля 2020

Я новичок в Джулии, и я искал способ загружать только определенные столбцы c из файла, разделенного пробелами; Решения, приведенные на странице github CSV, похоже, не работают (https://github.com/JuliaData/CSV.jl/issues/154), ни на Julia 1.0.1, ни на 1.3.1.

Это пример входного файла с именем test .txt

ab c .p
1 2 3
4 5 6

julia> using CSV, Tables  

julia> df = CSV.File(inputfile, delim=" ", header=1, type=String) |> select(:a, :b) |> DataFrame  
ERROR: UndefVarError: select not defined Stacktrace:  [1] top-level scope at none:0

Julia> df = CSV.File("test.txt", delim=" ", header=1, type=String) |> Tables.select(:a, :b) |> DataFrame  
ERROR: UndefVarError: select not defined Stacktrace:  [1] getproperty(::Module, ::Symbol) at ./sysimg.jl:13  [2] top-level scope at none:0

Итак, вот мои вопросы:

  1. Какой будет правильный синтаксис для загрузки столбцов a и b?
  2. Какой будет правильный синтаксис для загрузки столбцов a и c .p? (отделить с помощью точки в имени столбца)
  3. Какой будет правильный синтаксис для загрузки указанных c столбцов по номерам, например столбцов 1 и 3, из файла, который не есть заголовок?

Спасибо,

Steph

1 Ответ

3 голосов
/ 21 апреля 2020

Используйте параметр select для CSV.File, как описано здесь :

julia> CSV.File(inputfile, delim=" ", header=1, type=String, select=[:a,:b])
2-element CSV.File{false}:
 CSV.Row{false}: (a = "1", b = "2")
 CSV.Row{false}: (a = "4", b = "5")

julia> CSV.File(inputfile, delim=" ", header=1, type=String, select=[:a,:var"c.p"])
2-element CSV.File{false}:
 CSV.Row{false}: (a = "1", c.p = "3")
 CSV.Row{false}: (a = "4", c.p = "6")

julia> CSV.File(inputfile, delim=" ", header=1, type=String, select=[1,3])
2-element CSV.File{false}:
 CSV.Row{false}: (a = "1", c.p = "3")
 CSV.Row{false}: (a = "4", c.p = "6")

А если файл не имеет заголовка, используйте параметр header, как описано здесь .

...