如何在Julia Dataframes中替换丢失的虚拟值?

Bar*_*sen 3 dataframe julia

我有一组来自ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/的天气数据.

数据集包括温度和降雨量等,并使用-9999作为虚拟值来表示缺失数据.

我想missing在DataFrame中替换该值,以便它不会包含在统计计算或绘图中.在创建数据帧时,有没有办法可以做到这一点?或者可以在创建数据帧之后完成?

Bog*_*ski 5

除了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提出的调整版本.