我试图使用PlutoUI库的Filepicker元素
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文件将成功保存,但如果没有数据(不是什么大不了的)和ArgumentError: Symbol name may not contain \0错误的数据行之间的空行,就无法用CSV.File(open(read, csv_path)) |> DataFrame;读取该文件。我可以使用normalizenames=true来解决第二个问题,但是这些数据会被炒掉,无法使用。
我还试着用StringEncodings编码UTF-8和UTF-16,但没有运气--它仍然是炒鸡蛋。
帮助?
发布于 2020-09-25 23:24:47
这在您的用例中有效吗?
UInt8.(user_csv["data"]) |> IOBuffer |> CSV.File |> DataFrame这是通过将Int64s转换为字节(UInt8)来实现的。从那里,用户数据可以被放入一个IOBuffer中,这个IOBuffer可以被输入到CSV解析器。
你发布的数据似乎被截断了,所以我无法在上面进行测试。但在合成数据(包括UTF8字符)上,这似乎适用于我的系统。下面是冥王星外的一个例子:
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 │发布于 2020-12-11 12:17:06
您也可以使用TableIO。以下内容适用于多种表格文件格式,包括CSV:(所有行都是Pluto中的单独单元格):
using PlutoUI, TableIO, DataFrames
@bind f PlutoUI.FilePicker() # pick any supported file type
df = DataFrame(read_table(f); copycols=false)https://stackoverflow.com/questions/64072033
复制相似问题