微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Julia,Pluto.jl和PlutoUI.jl的FilePicker元素读取上传的CSV文件

如何解决如何使用Julia,Pluto.jl和PlutoUI.jl的FilePicker元素读取上传的CSV文件

我正在尝试使用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文件成功保存,但是如果没有在每行包含数据的行(没有什么大不了)和{{1 }}错误。我可以使用CSV.File(open(read,csv_path)) |> DataFrame;解决第二个问题,但是数据变得混乱不堪,无法使用。

我还尝试过使用StringEncodings将其编码为UTF-8和UTF-16,但不走运-它仍然是炒鸡蛋。

帮助?

解决方法

在您的用例中可以完成这项工作吗?

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

这可以通过将Int64转换为字节(UInt8)来实现。从那里,用户数据可以放入IOBuffer中,然后可以输入到CSV分析器中。

您发布的数据似乎已被截断,因此我无法对其进行测试。但是在组成的数据(包括UTF8字符)上,这似乎在我的系统上有效。这是冥王星以外的示例:

julia> d = [207,128,44,32,98,10,49,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     │
,

您还可以使用TableIO。 以下适用于多种表格文件格式,包括CSV :(所有行都是Pluto中的单独单元格):

using PlutoUI,TableIO,DataFrames

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。