我正在尝试通过 for 循环从所有股票的数据中提取特定股票代码的数据。当我在 for 循环之外使用代码时,代码正在工作,而相同的代码在 for 循环中不工作。
下面是代码 -
在职的 -
df = fh_5[fh_5.symbol .== "GOOG", ["date","close"]]
不工作 -
for s in unique!(fh_5.symbol)
df = fh_5[fh_5.symbol .== s, ["date","close"]]
date_range = leftjoin(date_range, df, on =:"dates" => :"date")
end
错误
ERROR: BoundsError: attempt to access 6852038×8 DataFrame at index [Bool[1, 0, 0, 0, 0, 0, 0, 0, 0, 0 … 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ["date", "close"]]
Stacktrace:
[1] getindex(df::DataFrame, row_inds::BitVector, col_inds::Vector{String})
@ DataFrames ~\.julia\packages\DataFrames\3mEXm\src\dataframe\dataframe.jl:448
[2] top-level scope
@ .\REPL[349]:2
在我运行 for 循环之后,在 for 循环之外工作的代码不起作用,我必须重新导入 csv 文件 - 如果我先运行它,for 循环之外的代码就可以工作。我在运行 for 循环时是否更改了基础数据集 fh_5?
只是添加可重现的示例-示例 的数据
以下是使用的代码 -
using DataFrames
using DataFramesMeta
using CSV
using Dates
using Query
fh_5 = CSV.read("D:\\Julia_Dataframe\\JuliaCon2020-DataFrames-Tutorial\\fh_5yrs.csv", DataFrame)
min_date = minimum(fh_5[:, "date"])
max_date = maximum(fh_5[:, "date"])
date_seq = string.(collect(Dates.Date(min_date) : Dates.Day(1) : Dates.Date(max_date)))
date_range = df = DataFrame(dates = date_seq)
date_range.dates = Date.(date_range.dates, "yyyy-mm-dd")
for s in unique(fh_5.symbol)
df = fh_5[fh_5.symbol .== s, ["date","close"]]
date_range = leftjoin(date_range, df, on =:"dates" => :"date")
rename!(date_range, Dict(:close => s))
end