Чтение CSV в Юлии;CSV.TooManyColumnsError - PullRequest
0 голосов
/ 24 января 2019

В пандах, когда мы читаем CSV-файл с помощью функции pandas.read_csv, мы можем установить ключевое слово error_bad_lines = False, которое позволяет нам пропускать строки со слишком большим количеством полей и гарантировать, что объект DataFrame будет возвращен.См. Документацию здесь .

В Джулии я использую CSV.read для чтения некоторых данных, но объект не возвращается.После документации я использую CSV.validate, чтобы увидеть, в чем проблема, и получаю CSV.TooManyColumnsError.Так что мне было интересно, есть ли в Джулии ключевое слово (похожее на панд)?В общем, как можно преодолеть эту ошибку и получить возвращенный DataFrame?

1 Ответ

0 голосов
/ 24 января 2019

На самом деле CSV.jl должен вести себя по умолчанию, считывая данные и удаляя лишние столбцы.Вот пример:

julia> using CSV, DataFrames

julia> println(read("x.txt", String))
a,b,c
1,2,3
4,5,6,7,8
1,2
1,2,3


julia> df = CSV.read("x.txt")
4×3 DataFrame
│ Row │ a      │ b      │ c       │
│     │ Int64⍰ │ Int64⍰ │ Int64⍰  │
├─────┼────────┼────────┼─────────┤
│ 1   │ 1      │ 2      │ 3       │
│ 2   │ 4      │ 5      │ 6       │
│ 3   │ 1      │ 2      │ missing │
│ 4   │ 1      │ 2      │ 3       │

Короче говоря: слишком длинные строки не пропускаются, а усекаются.И слишком короткие строки (как вы можете видеть в примере) заполнены missing.Но во всех случаях вы должны получить объект DataFrame.

Конечно, CSV.validate в случае ошибки в первой недопустимой строке:

julia> CSV.validate("x.txt")
ERROR: CSV.TooManyColumnsError("row=2, col=3: expected 3 columns then a newline or EOF; parsed row: '4, 5, 6'")
...