Как прочитать загруженный CSV-файл с помощью Julia, Pluto.элемент FilePicker от jl и PlutoUI.jl

#dataframe #csv #file-upload #julia #pluto.jl

#фрейм данных #csv #файл-загрузка #джулия #pluto.jl

Вопрос:

Я пытаюсь использовать элемент Filepicker библиотеки PlutoUI

md""" Upload a Comma Separated Values (.csv) file to use: $(@bind user_csv FilePicker()) """

чтобы разрешить пользователю загружать CSV-файл для обработки. К сожалению, тип данных не определяется, и данные представляются в виде одномерного массива Int64:

Dict("name"=>"mtg_binder.csv", "data"=>Int64[ 81 117 97 110 116 105 116 121 44 78 97 109 101 44 83 105 109 112 108 101 95 78 97 109 101 44 83 101 116 44 67 97 114 100 95 78 117 109 98 101 53 52 51 46 49 57 34 44 13 10], "type"=>"")

Итак, как мне обработать / преобразовать массив Int64 во что-то, что я могу вставить в фрейм данных?

Некоторые вещи, которые я пробовал:

Если я успешно выполняю write(csv_path, user_csv["data"]) файл csv, но я не могу прочитать файл обратно CSV.File(open(read, csv_path)) |> DataFrame; , не получая пустых строк между каждой строкой с данными (не имеет большого значения) и ArgumentError: Symbol name may not contain ошибками. Я могу использовать normalizenames=true для решения второй проблемы, но данные становятся яичницей и непригодны для использования.

Я также пытался использовать StringEncodings для кодирования в UTF-8 и UTF-16, но безуспешно — это все еще яичница-болтунья.

Помогите?

Ответ №1:

Будет ли это работать в вашем случае использования?

 UInt8.(user_csv["data"]) |> IOBuffer |> CSV.File |> DataFrame
  

Это работает путем преобразования Int64 s в байты ( UInt8 ) . Оттуда пользовательские данные могут быть помещены в an IOBuffer , которые могут быть переданы анализатору CSV.

Опубликованные вами данные, похоже, были усечены, поэтому я не смог их протестировать. Но для составленных данных (включая символы UTF8) это, похоже, работает в моей системе. Вот пример за пределами Pluto:

 julia> d = [207,128,44,32,98,10,49,44,32,50,10]
11-element Array{Int64,1}:
 207
 128
  44
 ...

julia> using CSV, DataFrames

julia> UInt8.(d) |> IOBuffer |> CSV.File |> DataFrame
1×2 DataFrame
│ Row │ π     │  b    │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 2     │
  

Ответ №2:

Вы также можете использовать TableIO . Следующее работает для нескольких форматов табличных файлов, включая CSV: (все строки представляют собой отдельные ячейки в Pluto):

 using PlutoUI, TableIO, DataFrames

@bind f PlutoUI.FilePicker() # pick any supported file type

df = DataFrame(read_table(f); copycols=false)