运行代码时,我的代码 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答案 0 :(得分:4)
setindex!(collection, item, inds...)
是colection[inds...] = item
的功能。该错误是由于CSV.read
构成了一个不可变的集合而引起的。
答案 1 :(得分:2)
正如奥斯卡(Oscar)在回答中所说,setindex!
试图改变其论点,即就地更改列的内容。当您执行CSV.read()
时,默认情况下会返回CSV.Column
类型的不可变列。这样做是出于性能考虑,因为这意味着在解析后不必复制列。
要解决此问题,您可以做两件事:
CSV.read(raw"wikipediaEVDdatesconverted.csv", copycols = true)
-这将复制列并因此使其可变;或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”) 结束