朱莉娅中的“ setindex!not defined”错误是什么?

时间:2020-05-25 03:05:30

标签: coding-style julia ijulia-notebook

运行代码时,我的代码 setindex发生一个错误!未为WeakRefStrings.StringArray {String,1}

定义

CSV文件here

using CSV
EVDdata =CSV.read(raw"wikipediaEVDdatesconverted.csv")
EVDdata[end-9:end,:]

错误代码为here

rows, cols = size(EVDdata)
for j =1:cols
    for i = 1:rows
        if !isdigit(string(EVDdata[i, j])[1])
            EVDdata[i,j] = 0
        end
    end
end

我正在使用 Jupter Notebook

上的 Julia 1.4.1

3 个答案:

答案 0 :(得分:4)

setindex!(collection, item, inds...)colection[inds...] = item的功能。该错误是由于CSV.read构成了一个不可变的集合而引起的。

答案 1 :(得分:2)

正如奥斯卡(Oscar)在回答中所说,setindex!试图改变其论点,即就地更改列的内容。当您执行CSV.read()时,默认情况下会返回CSV.Column类型的不可变列。这样做是出于性能考虑,因为这意味着在解析后不必复制列。

要解决此问题,您可以做两件事:

  1. 传递关键字参数CSV.read(raw"wikipediaEVDdatesconverted.csv", copycols = true)-这将复制列并因此使其可变;或
  2. 使用DataFrame((raw"wikipediaEVDdatesconverted.csv"))

第二种方法是首选方法,因为CSV.read包中将弃用CSV.jl

您可以看到它的当前实现基本上是在源here的上面(2)中列出的位置执行相同的操作。删除此方法将使CSV.jl不再依赖DataFrames.jl

答案 2 :(得分:1)

也可以通过这种方式完成

col1dt = Vector {Dates.DateTime}(undef,length(col1))

对于v = 1:length(col1) col1dt [v] = Dates.DateTime(col1 [v],“ d-u-y”) 结束