JuliaのデータフレームでNaNを0に置き換える方法
概要
特定の値に変更する方法は、列ごとに変更するので不便で、データフレーム全体でNaNを扱うときはもっといいトリックを使ってみる価値がある。
コード
julia> df = DataFrame(rand(1:9,3,3), :auto) ./ DataFrame(rand(0:1,3,3), :auto)
3×3 DataFrame
 Row │ x1       x2       x3      
     │ Float64  Float64  Float64
─────┼───────────────────────────
   1 │     5.0    Inf        7.0
   2 │   Inf        8.0    Inf
   3 │     4.0      1.0      4.0
例えば、上のデータフレームでInfを0に置換したい場合、次のようにたった一行で変更できる。
julia> ifelse.(isinf.(df), 0, df)
3×3 DataFrame
 Row │ x1       x2       x3      
     │ Float64  Float64  Float64
─────┼───────────────────────────
   1 │     5.0      0.0      7.0
   2 │     0.0      8.0      0.0
   3 │     4.0      1.0      4.0
もちろん、ifelse.(isinf.(df), 0, df)のisinfをisnanに変更すればNaNを扱い、0を任意の値に変更することができる。
全コード
using DataFrames, Random
Random.seed!(0)
df = DataFrame(rand(1:9,3,3), :auto) ./ DataFrame(rand(0:1,3,3), :auto)
ifelse.(isinf.(df), 0, df)
参考
環境
- OS: Windows
 - julia: v1.6.3
 
