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