我有一组来自ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/的天气数据.
数据集包括温度和降雨量等,并使用-9999作为虚拟值来表示缺失数据.
我想missing在DataFrame中替换该值,以便它不会包含在统计计算或绘图中.在创建数据帧时,有没有办法可以做到这一点?或者可以在创建数据帧之后完成?
除了Dan Getz提出的建议外,还有两种选择:
recode功能我正在使用Dan的例子:
julia> df = DataFrame(x=rand(10),y=[rand()<0.3 ? 9999.0 : rand() for i=1:10])
10×2 DataFrames.DataFrame
? Row ? x ? y ?
??????????????????????????????
? 1 ? 0.856388 ? 0.322763 ?
? 2 ? 0.360254 ? 9999.0 ?
? 3 ? 0.229875 ? 0.906697 ?
? 4 ? 0.275965 ? 0.485042 ?
? 5 ? 0.126336 ? 0.205509 ?
? 6 ? 0.879974 ? 0.752962 ?
? 7 ? 0.0518579 ? 9999.0 ?
? 8 ? 0.512231 ? 0.759513 ?
? 9 ? 0.309586 ? 9999.0 ?
? 10 ? 0.616471 ? 0.978771 ?
julia> df[:y] = recode(df[:y], 9999.0=>missing)
10-element Array{Union{Float64, Missings.Missing},1}:
0.322763
missing
0.906697
0.485042
0.205509
0.752962
missing
0.759513
missing
0.978771
julia> df
10×2 DataFrames.DataFrame
? Row ? x ? y ?
??????????????????????????????
? 1 ? 0.856388 ? 0.322763 ?
? 2 ? 0.360254 ? missing ?
? 3 ? 0.229875 ? 0.906697 ?
? 4 ? 0.275965 ? 0.485042 ?
? 5 ? 0.126336 ? 0.205509 ?
? 6 ? 0.879974 ? 0.752962 ?
? 7 ? 0.0518579 ? missing ?
? 8 ? 0.512231 ? 0.759513 ?
? 9 ? 0.309586 ? missing ?
? 10 ? 0.616471 ? 0.978771 ?
Run Code Online (Sandbox Code Playgroud)
此外,如果要将整个DataFrame(所有列)重新编码为新数据框,可以使用colwise:
julia> DataFrame(colwise(x -> recode(x, 9999.0=>missing), df), names(df))
10×2 DataFrames.DataFrame
? Row ? x ? y ?
??????????????????????????????
? 1 ? 0.856388 ? 0.322763 ?
? 2 ? 0.360254 ? missing ?
? 3 ? 0.229875 ? 0.906697 ?
? 4 ? 0.275965 ? 0.485042 ?
? 5 ? 0.126336 ? 0.205509 ?
? 6 ? 0.879974 ? 0.752962 ?
? 7 ? 0.0518579 ? missing ?
? 8 ? 0.512231 ? 0.759513 ?
? 9 ? 0.309586 ? missing ?
? 10 ? 0.616471 ? 0.978771 ?
Run Code Online (Sandbox Code Playgroud)
missing在创建时检测sDataFrame这取决于您用于加载数据的包.例如,如果您使用CSV.jl,则可以添加null="-9999"关键字参数CSV.read.在更复杂的情况下,您可以使用transforms关键字参数,例如使用val2missingDan提出的调整版本.