# Find DataFrame row with missing values present

**URL:** <https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728>\
**Category:** General Usage\
**Tags:** dataframes\
**Created:** [January 9, 2023, 7:16pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728 "2023-01-09T19:16:28Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jake](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jake/32/46007_2.png) [@Jake](https://discourse.julialang.org/u/Jake)\
**Post date:** [January 9, 2023, 7:16pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/1 "2023-01-09T19:16:28Z")

</div>

I am trying to find a row in a dataframe column that has missing values as well. As an example the following code without the missing value works:

```julia
julia> df = DataFrame(name=["a", "b", "c"], value=[1,2,3])
3×2 DataFrame
 Row │ name value
     │ String Int64
─────┼───────────────
   1 │ a 1
   2 │ b 2
   3 │ c 3

julia> df[df.name .== "a", :]
1×2 DataFrame
 Row │ name value
     │ String Int64
─────┼───────────────
   1 │ a 1

julia>

```

However when a missing value is introduced in the column it no longer work as shown here:

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

julia> df[df.name .== "a", :]
ERROR: ArgumentError: unable to check bounds for indices of type Missing
Stacktrace:
 [1] checkindex(#unused#::Type{Bool}, inds::Base.OneTo{Int64}, i::Missing)
   @ Base .\abstractarray.jl:725
 [2] checkindex
   @ .\abstractarray.jl:740 [inlined]
 [3] getindex(df::DataFrame, row_inds::Vector{Union{Missing, Bool}}, #unused#::Colon)
   @ DataFrames C:\Users\jakez\.julia\packages\DataFrames\dgZn3\src\dataframe\dataframe.jl:600
 [4] top-level scope
   @ REPL[34]:1

julia>

```

What is the technique to find the requested row?

---

<div class="post-metadata">

**Author:** ![contradict](https://avatars.discourse-cdn.com/v4/letter/c/ac91a4/32.png) [@contradict](https://discourse.julialang.org/u/contradict)\
**Post date:** [January 9, 2023, 7:30pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/2 "2023-01-09T19:30:02Z")

</div>

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

julia> named_a = findall(skipmissing(df.name)) do nm
       nm == "a"
       end

julia> named_a = findall(skipmissing(df.name)) do nm
       nm == "a"
       end
2-element Vector{Int64}:
 1
 4

julia> df[named_a, :]
2×2 DataFrame
 Row │ name value
     │ String? Int64
─────┼────────────────
   1 │ a 1
   2 │ a 4

```

---

<div class="post-metadata">

**Author:** ![Dan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dan/32/42581_2.png) [@Dan](https://discourse.julialang.org/u/Dan)\
**Post date:** [January 9, 2023, 7:33pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/3 "2023-01-09T19:33:51Z")

</div>

Another option using the nifty `coalesce` function:

```julia
julia> df[coalesce.(df.name .== "a",false),:]
2×2 DataFrame
 Row │ name value 
     │ String? Int64 
─────┼────────────────
   1 │ a 1
   2 │ a 4

```

The `coalesce` function and its equivalent for replacing `nothing` values, `something(...)` are very useful and cool in my opinion.

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [January 9, 2023, 7:36pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/4 "2023-01-09T19:36:12Z")

</div>

And a technique using DataFramesMeta.jl is:

```julia
julia> using DataFramesMeta

julia> @rsubset(df, :name == "a")
1×2 DataFrame
 Row │ name value
     │ String? Int64
─────┼────────────────
   1 │ a 1

```

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [January 9, 2023, 7:38pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/5 "2023-01-09T19:38:12Z")

</div>

also:

```julia
julia> df[isequal.(df.name, "a"), :]
1×2 DataFrame
 Row │ name value
     │ String? Int64
─────┼────────────────
   1 │ a 1

```

---

<div class="post-metadata">

**Author:** ![Jake](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jake/32/46007_2.png) [@Jake](https://discourse.julialang.org/u/Jake)\
**Post date:** [January 9, 2023, 7:53pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/6 "2023-01-09T19:53:45Z")

</div>

Thank you for all the answers, I don’t know how to mark all of them as a solution!

---

<div class="post-metadata">

**Author:** ![rocco\_sprmnt21](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rocco_sprmnt21/32/20127_2.png) [@rocco\_sprmnt21](https://discourse.julialang.org/u/rocco_sprmnt21)\
**Post date:** [January 9, 2023, 9:00pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/7 "2023-01-09T21:00:33Z")

</div>

```julia
using DataFrames
df = DataFrame(name=["a", "b", missing,"a"], value=[1,2,3,4])

dfm=dropmissing(df,:name)

dfm[dfm.name .== "a", :]

```

```julia
df[.===("a",df.name),:]

```

---

<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:** [January 9, 2023, 10:43pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/8 "2023-01-09T22:43:13Z")

</div>

I have some macros to make this easier in [MissingsAsFalse.jl](https://github.com/pdeffebach/MissingsAsFalse.jl).

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [January 9, 2023, 11:14pm UTC](https://discourse.julialang.org/t/find-dataframe-row-with-missing-values-present/92728/9 "2023-01-09T23:14:47Z")

</div>

The original failure:

```julia
df[df.name .== "a", :]

```

has a close solution, as per @rocco_sprmnt21:

```julia
df[df.name .=== "a", :]

```
