# % of missingness per column

**URL:** https://discourse.julialang.org/t/of-missingness-per-column/120888
**Category:** New to Julia
**Created:** [October 4, 2024, 6:25am UTC](https://discourse.julialang.org/t/of-missingness-per-column/120888 "2024-10-04T06:25:17Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![ShakiraBabirye25](https://avatars.discourse-cdn.com/v4/letter/s/3e96dc/32.png) [@ShakiraBabirye25](https://discourse.julialang.org/u/ShakiraBabirye25)
#### Post date: [October 4, 2024, 6:25am UTC](https://discourse.julialang.org/t/of-missingness-per-column/120888/1 "2024-10-04T06:25:17Z")

</div>

Hello there!  
How do i proceed from here (describe(df, :nmissing)) to get the % of missingness per column in my df dataframe?

---

<div class="post-metadata">

### Author: ![b-lukaszuk](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/b-lukaszuk/32/207730_2.png) [@b-lukaszuk](https://discourse.julialang.org/u/b-lukaszuk)
#### Post date: [October 4, 2024, 7:28am UTC](https://discourse.julialang.org/t/of-missingness-per-column/120888/2 "2024-10-04T07:28:10Z")

</div>

Hi.

You may try, e.g. something like

```julia
import DataFrames as Dfs
import Statistics as Stats

df = Dfs.DataFrame(
    :col1 => rand([missing, 1:6...], 10), 
    :col2 => rand([missing, 1:6...], 10)
)

map(ismissing, df[!, "col1"]) |> xs -> Stats.mean(xs) * 100

```

Short explanation:  
`map` executes `ismissing` function on `col1` and returns a vector of Bools, which is then sent to anonymous function that names the vector `xs` and calculates its mean (`Stats.mean(xs)`, true is treated as 1, false as 0) which is multiplied by 100 to get the result expressed as percentage

For all columns you could go with:

```julia
for c in Dfs.names(df)
    println("%missing in $c = ", 
            map(ismissing, df[!, c]) |> xs -> Stats.mean(xs) * 100)
end

```

---

<div class="post-metadata">

### Author: ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)
#### Post date: [October 4, 2024, 7:50am UTC](https://discourse.julialang.org/t/of-missingness-per-column/120888/3 "2024-10-04T07:50:33Z")

</div>

`describe(df)` produces another DataFrame, so you can just add a column to that:

```julia
julia> df = DataFrame(rand([missing; 1:6], 10_000, 3), :auto);

julia> x = describe(df, :nmissing);

julia> x.perc_missing = 100 .* x.nmissing ./ nrow(df); x
3×3 DataFrame
 Row │ variable nmissing perc_missing
     │ Symbol Int64 Float64
─────┼──────────────────────────────────
   1 │ x1 1408 14.08
   2 │ x2 1432 14.32
   3 │ x3 1455 14.55

```

---

<div class="post-metadata">

### Author: ![ShakiraBabirye25](https://avatars.discourse-cdn.com/v4/letter/s/3e96dc/32.png) [@ShakiraBabirye25](https://discourse.julialang.org/u/ShakiraBabirye25)
#### Post date: [October 4, 2024, 8:46am UTC](https://discourse.julialang.org/t/of-missingness-per-column/120888/4 "2024-10-04T08:46:02Z")

</div>

> [@b-lukaszuk](#):
>
> ```julia
> import DataFrames as Dfs
> import Statistics as Stats
> 
> ```

Thank you!
