csv - 导入 csv 在 Jupyter 笔记本中的初始位置 Julia 中返回编码标识符

标签 csv jupyter-notebook julia

我正在尝试学习 Julia,但在将数据从 csv 导入 Jupyter 笔记本时遇到问题。这看起来很基本,我确信我错过了一些简单的东西,但我一直无法找到有效的解决方案。

当我运行导入脚本时:

using DelimitedFiles
println("Download from https://en.wikipedia.org/wiki/West_African_Ebola_virus_epidemic_timeline_of_reported_cases_and_deaths")
println("Downloaded and saved to csv on 6-25-2020")
wikiEVDraw = DelimitedFiles.readdlm("wikipediaEVDraw.csv", ',', header = true)

# Download from https://en.wikipedia.org/wiki/West_African_Ebola_virus_epidemic_timeline_of_reported_cases_and_deaths
# Downloaded and saved to csv on 6-25-2020
# (Any["25-Nov-15" "28,637" … "14,122" "3,955"; "18-Nov-15" "28,634" … "14,122" "3,955"; … ; "31-Mar-14" # 130 … "–" "–"; "22-Mar-14" 49 … "–" "–"], 
# AbstractString["\ufeffDate" "Total_cases" … "Sierra Leone_Cases" "Sierra Leon_Deaths"])

我的问题是第一个位置的前导字符(“\ufeff”)。作为解决方法,我可以在外部程序中编辑源 csv 以添加额外的行,然后使用 skipstart = 1 跳过第一行我已尝试根据其他地方的建议指定编码,但是添加 encoding = :utf8 引发错误。

我想我也可以拆分第一个 header 中的字符串,但这似乎应该是标准的。

该 csv 是通过将数据从 Web 表复制到 Excel,然后另存为 csv 来创建的。我在其他几个程序(R、记事本、Atom、 Notepad++ )中查看过该文件,但没有看到主角。

最佳答案

这是BOM(字节顺序标记)的第一个字节,表示字符编码。 \ufeff 在此表示 UTF-16 有关更多详细信息,请参阅 https://en.wikipedia.org/wiki/Byte_order_mark#UTF-16

阅读文件时您应该跳过它。 但是,CSV.jl 会自动执行此操作:

shell> more "C:\temp\f.txt"
a    b
1       2
3       4

julia> CSV.read(raw"C:\temp\f.txt")
2×2 DataFrame
│ Row │ a     │ b     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 2     │
│ 2   │ 3     │ 4     │

如果您想继续使用DelimitedFiles,只需跳过前三个字节:

julia> open(raw"C:\temp\f.txt") do io
           read(io,3)
           readdlm(io)
       end
3×2 Array{Any,2}:
  "a"   "b"
 1     2
 3     4

在某些情况下,您实际上会有 UTF-16 编码的字符,在这种情况下您需要解码:

julia> using StringEncodings

julia> open(raw"C:\temp\f2.txt", enc"UTF-16") do io
           readdlm(io)
       end
3×2 Array{Any,2}:
  "a"   "b"
 1     2
 3     4

关于csv - 导入 csv 在 Jupyter 笔记本中的初始位置 Julia 中返回编码标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62597590/

相关文章:

python - pandas read_csv 删除空白行

javascript - 管道中的 csv 解析错误处理

python - 为什么我在 Python 中得到一个额外的条形图?

include - julia: `include` 文件的推荐方法:顶级文件中的包含列表或嵌套包含?

dataframe - 如何从记录/行创建数据框

julia - 需要很长时间的基准测试功能

sql-server - 使用 bcp 实用程序和 SQL Server 2008 将表导出到带有列标题(列名称)的文件

shell - 使用将 csv 转换为 html 表

visual-studio-code - 为什么 Jupyter notebook 在 VS Code 中显示为 JSON 文件?

python - IPython 笔记本 : how to display() multiple objects without newline