首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Julia、Pluto.jl和PlutoUI.jl的FilePicker元素读取上传的CSV文件

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

Stack Overflow用户
提问于 2020-09-25 22:29:22
回答 2查看 1.1K关注 0票数 3

我试图使用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,但没有运气--它仍然是炒鸡蛋。

帮助?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-25 23:24:47

这在您的用例中有效吗?

代码语言:javascript
复制
UInt8.(user_csv["data"]) |> IOBuffer |> CSV.File |> DataFrame

这是通过将Int64s转换为字节(UInt8)来实现的。从那里,用户数据可以被放入一个IOBuffer中,这个IOBuffer可以被输入到CSV解析器。

你发布的数据似乎被截断了,所以我无法在上面进行测试。但在合成数据(包括UTF8字符)上,这似乎适用于我的系统。下面是冥王星外的一个例子:

代码语言:javascript
复制
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     │
票数 5
EN

Stack Overflow用户

发布于 2020-12-11 12:17:06

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

代码语言:javascript
复制
using PlutoUI, TableIO, DataFrames

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

df = DataFrame(read_table(f); copycols=false)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64072033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档