csv - 具有不同列数的 Readtable() - Julia

标签 csv dataframe julia

我正在尝试使用 readtable() 将 CSV 文件读入 DataFrame。 CSV 文件存在一个不幸的问题,如果给定行的最后 x 列为空白,它不会生成该数量的逗号,而只是结束该行。例如,我可以:

Col1,Col2,Col3,Col4
item1,item2,,item4
item5

请注意第三行中只有一个条目。理想情况下,我希望 readtable 用 NA、NA 和 NA 填充 Col2、Col3 和 Col4 的值;然而,由于缺少逗号并因此缺少空字符串,readtable() 只是将其视为与列数不匹配的行。如果我使用上面的示例 CSV 在 Julia 中运行 readtable(),我会收到错误消息“看到 2 行、2 列和 5 个字段,* 第 1 行有 6 列”。如果我在 item5 后添加 3 个逗号,则它有效。

有什么办法解决这个问题,还是我必须修复 CSV 文件?

最佳答案

如果 CSV 解析不需要太多的引用逻辑,很容易编写一个专用的解析器来处理缺少列的情况。像这样:

function bespokeread(s)
  headers = split(strip(readline(s)),',')
  ncols = length(headers)
  data = [String[] for i=1:ncols]
  while !eof(s)
    newline = split(strip(readline(s)),',')
    length(newline)<ncols && append!(newline,["" for i=1:ncols-length(newline)])
    for i=1:ncols
      push!(data[i],newline[i])
    end
  end
  return DataFrame(;OrderedDict(Symbol(headers[i])=>data[i] for i=1:ncols)...)
end

然后是文件:

Col1,Col2,Col3,Col4
item1,item2,,item4
item5

会给出:

julia> df = bespokeread(f)
2×4 DataFrames.DataFrame
│ Row │ Col1    │ Col2    │ Col3 │ Col4    │
├─────┼─────────┼─────────┼──────┼─────────┤
│ 1   │ "item1" │ "item2" │ ""   │ "item4" │
│ 2   │ "item5" │ ""      │ ""   │ ""      │

关于csv - 具有不同列数的 Readtable() - Julia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41175613/

相关文章:

Python Pandas 检查字符串是否仅为 "Date"或仅为 "Time"或 "Datetime"

swift - 从 CSV 文件中分离字符串

python - Pandas - 创建包含 2 个类的新列,其中 id 的最后一行是另一个类

python - 将 csv 数据加载到 pandas 数据帧后如何添加 MultiIndex?

Bash:按前 4 列对 csv 文件进行排序

Python,如何将长度不等的嵌套列表写入csv文件?

python - 基于最左索引对多索引数据框中的列应用相关数学运算

iterator - 在 Julia 中如何巧妙地处理零维度和迭代器

julia - 在 Julia : ArgumentError: provide a valid sink argument, 中导入 CSV 文件,如 `using DataFrames; CSV.read(source, DataFrame)`

string - 从十六进制字符串表示创建原始 unicode 字符