朱莉娅 | 数据帧 | 替换缺失值

Ami*_*ari 10 dataframe julia

我们如何missing0.0a 中的列替换值DataFrame

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)

带有逻辑索引的 Base.ismissing

您可以使用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)

数据帧元

二者replacecoalesce可以与使用@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)

附加文件


Fel*_*ema 2

df与一些人一起创造NAs

\n\n
using DataFrames\ndf = DataFrame(A = 1.0:10.0, B = 2.0:2.0:20.0)\ndf[ df[:B] %2 .== 0, :A ] = NA\n
Run Code Online (Sandbox Code Playgroud)\n\n

你会看到NA一些df我们现在将它们转换为 0.0

\n\n
df[ isna(df[:A]), :A] = 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑= NaN\xe2\x86\x92NA。谢谢@雷扎

\n