# Counting missing in a dataframe

**URL:** <https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186>\
**Category:** General Usage\
**Tags:** dataframes\
**Created:** [April 28, 2021, 6:02pm UTC](https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186 "2021-04-28T18:02:07Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![statspy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/statspy/32/26630_2.png) [@statspy](https://discourse.julialang.org/u/statspy)\
**Post date:** [April 28, 2021, 6:02pm UTC](https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186/1 "2021-04-28T18:02:07Z")

</div>

Lets say i have the following dataframe:

```julia
df=DataFrame(A=[1,2,missing], B=[10,missing,missing])

```

I need to count how many missing’s in each column and get the result like this:  
A(1), B(2)

i tried:

```julia
collect(ismissing(x) for x in eachcol(df))

```

and it returns 0,0. Idk why.

Thanks

---

<div class="post-metadata">

**Author:** ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)\
**Post date:** [April 28, 2021, 6:32pm UTC](https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186/2 "2021-04-28T18:32:25Z")

</div>

> [@statspy](#):
>
> `collect(ismissing(x) for x in eachcol(df))`

```julia

julia> describe(df, :nmissing)
2×2 DataFrame
 Row │ variable nmissing 
     │ Symbol Int64    
─────┼────────────────────
   1 │ A 1
   2 │ B 2

```

---

<div class="post-metadata">

**Author:** ![statspy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/statspy/32/26630_2.png) [@statspy](https://discourse.julialang.org/u/statspy)\
**Post date:** [April 28, 2021, 6:34pm UTC](https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186/3 "2021-04-28T18:34:35Z")

</div>

thanks.

---

<div class="post-metadata">

**Author:** ![statspy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/statspy/32/26630_2.png) [@statspy](https://discourse.julialang.org/u/statspy)\
**Post date:** [April 28, 2021, 6:41pm UTC](https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186/4 "2021-04-28T18:41:53Z")

</div>

@izr Is there an easy way to append another column with the size of the df? for example, column A has 1 missing out of 3 values, like adding nrow

---

<div class="post-metadata">

**Author:** ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)\
**Post date:** [April 28, 2021, 7:39pm UTC](https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186/5 "2021-04-28T19:39:36Z")

</div>

This counts nonmissing values. Counting all values is different.

```julia
julia> describe(df, :nmissing, length => :length)
2×3 DataFrame
 Row │ variable nmissing length 
     │ Symbol Int64 Int64  
─────┼────────────────────────────
   1 │ A 1 2
   2 │ B 2 1

```

I’m not sure why

```julia
julia> describe(df, length)

```

isn’t allowed, it seems like it could be.

---

<div class="post-metadata">

**Author:** ![yha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yha/32/3502_2.png) [@yha](https://discourse.julialang.org/u/yha)\
**Post date:** [April 28, 2021, 8:55pm UTC](https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186/6 "2021-04-28T20:55:19Z")

</div>

> [@statspy](#):
>
> i tried:
> 
> ```julia
> collect(ismissing(x) for x in eachcol(df))
> 
> ```
> 
> and it returns 0,0. Idk why.

That’s because the elements returned by `eachcol(df)` are columns, which are arrays, and not `missing`. Your line is equivalent to

```julia
[ismissing(df.A), ismissing(df.B)]

```

To count missings in each columns you can do

```julia
[count(ismissing,col) for col in eachcol(df)]

```

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [April 28, 2021, 9:00pm UTC](https://discourse.julialang.org/t/counting-missing-in-a-dataframe/60186/7 "2021-04-28T21:00:56Z")

</div>

Just a note: This is a gotcha in DataFrames, and behaves differently in DataFrames 1.0

```julia
julia> df = DataFrame(a = [1, 1, 2, 2], b = [1, 1, missing, 4])
4×2 DataFrame
 Row │ a b       
     │ Int64 Int64?  
─────┼────────────────
   1 │ 1 1
   2 │ 1 1
   3 │ 2 missing 
   4 │ 2 4

julia> describe(df, length => :length)
2×2 DataFrame
 Row │ variable length 
     │ Symbol Union… 
─────┼──────────────────
   1 │ a 4
   2 │ b                

```

This is because functions are called on `skipmissing(col)` rather than `col`, and `length` is not defined for `SkipMissing` objects, so we get `nothing`.
