Cam*_*nek 14
这个问题有几种不同的方法(适用于 Julia 1.x):
可能最简单的方法是使用replace!或replace来自基础 Julia。这是一个示例replace!:
julia> using DataFrames
julia> df = DataFrame(x = [1, missing, 3])
3×1 DataFrame
? Row ? x ?
? ? Int64? ?
?????????????????
? 1 ? 1 ?
? 2 ? missing ?
? 3 ? 3 ?
julia> replace!(df.x, missing => 0);
julia> df
3×1 DataFrame
? Row ? x ?
? ? Int64? ?
????????????????
? 1 ? 1 ?
? 2 ? 0 ?
? 3 ? 3 ?
Run Code Online (Sandbox Code Playgroud)
但是,请注意,此时列的类型x仍然允许缺失值:
julia> typeof(df.x)
Array{Union{Missing, Int64},1}
Run Code Online (Sandbox Code Playgroud)
当打印出数据框时Int64,列中的问号也表明了这一点x。您可以使用disallowmissing!(来自 DataFrames.jl 包)来更改它:
julia> disallowmissing!(df, :x)
3×1 DataFrame
? Row ? x ?
? ? Int64 ?
???????????????
? 1 ? 1 ?
? 2 ? 0 ?
? 3 ? 3 ?
Run Code Online (Sandbox Code Playgroud)
或者,如果您replace按如下方式使用(不带感叹号),则输出将不允许缺失值:
julia> df = DataFrame(x = [1, missing, 3]);
julia> df.x = replace(df.x, missing => 0);
julia> df
3×1 DataFrame
? Row ? x ?
? ? Int64 ?
???????????????
? 1 ? 1 ?
? 2 ? 0 ?
? 3 ? 3 ?
Run Code Online (Sandbox Code Playgroud)
您可以使用ismissing逻辑索引为数组的所有缺失条目分配一个新值:
julia> df = DataFrame(x = [1, missing, 3]);
julia> df.x[ismissing.(df.x)] .= 0;
julia> df
3×1 DataFrame
? Row ? x ?
? ? Int64? ?
????????????????
? 1 ? 1 ?
? 2 ? 0 ?
? 3 ? 3 ?
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用coalesce:
julia> df = DataFrame(x = [1, missing, 3]);
julia> df.x = coalesce.(df.x, 0);
julia> df
3×1 DataFrame
? Row ? x ?
? ? Int64 ?
???????????????
? 1 ? 1 ?
? 2 ? 0 ?
? 3 ? 3 ?
Run Code Online (Sandbox Code Playgroud)
二者replace并coalesce可以与使用@transform来自宏DataFramesMeta.jl包:
julia> using DataFramesMeta
julia> df = DataFrame(x = [1, missing, 3]);
julia> @transform(df, x = replace(:x, missing => 0))
3×1 DataFrame
? Row ? x ?
? ? Int64 ?
???????????????
? 1 ? 1 ?
? 2 ? 0 ?
? 3 ? 3 ?
Run Code Online (Sandbox Code Playgroud)
julia> df = DataFrame(x = [1, missing, 3]);
julia> @transform(df, x = coalesce.(:x, 0))
3×1 DataFrame
? Row ? x ?
? ? Int64 ?
???????????????
? 1 ? 1 ?
? 2 ? 0 ?
? 3 ? 3 ?
Run Code Online (Sandbox Code Playgroud)
df与一些人一起创造NAs
using DataFrames\ndf = DataFrame(A = 1.0:10.0, B = 2.0:2.0:20.0)\ndf[ df[:B] %2 .== 0, :A ] = NA\nRun Code Online (Sandbox Code Playgroud)\n\n你会看到NA一些df我们现在将它们转换为 0.0
df[ isna(df[:A]), :A] = 0\nRun Code Online (Sandbox Code Playgroud)\n\n编辑= NaN\xe2\x86\x92NA。谢谢@雷扎