# DataFrameRow Row Number

**URL:** <https://discourse.julialang.org/t/dataframerow-row-number/18692>\
**Category:** New to Julia\
**Created:** [December 15, 2018, 5:32pm UTC](https://discourse.julialang.org/t/dataframerow-row-number/18692 "2018-12-15T17:32:28Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Paul\_McVay](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paul_mcvay/32/4307_2.png) [@Paul\_McVay](https://discourse.julialang.org/u/Paul_McVay)\
**Post date:** [December 15, 2018, 5:32pm UTC](https://discourse.julialang.org/t/dataframerow-row-number/18692/1 "2018-12-15T17:32:28Z")

</div>

If you have a data frame, and want to iterate over each row? How do you access the row number?

```julia
data = DataFrame(a = [1, 2, 3], b = ['a', 'b', 'c']) 
r = collect(eachrow(data))[1]

```

The row number is obviously stored but the normal way of accessing fields does not work

```julia
> fieldnames(typeof(r))
(:df, :row)
> r.row
ERROR: KeyError: key :row not found
Stacktrace:
 [1] getindex at ./dict.jl:478 [inlined]
 [2] getindex at /home/paul/.julia/packages/DataFrames/3sRhW/src/other/index.jl:137 [inlined]
 [3] getindex(::DataFrame, ::Int64, ::Symbol) at /home/paul/.julia/packages/DataFrames/3sRhW/src/dataframe/dataframe.jl:265
 [4] getindex at /home/paul/.julia/packages/DataFrames/3sRhW/src/dataframerow/dataframerow.jl:20 [inlined]
 [5] getproperty(::DataFrameRow{DataFrame}, ::Symbol) at /home/paul/.julia/packages/DataFrames/3sRhW/src/dataframerow/dataframerow.jl:37

```

---

<div class="post-metadata">

**Author:** ![Paul\_McVay](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paul_mcvay/32/4307_2.png) [@Paul\_McVay](https://discourse.julialang.org/u/Paul_McVay)\
**Post date:** [December 15, 2018, 5:42pm UTC](https://discourse.julialang.org/t/dataframerow-row-number/18692/2 "2018-12-15T17:42:18Z")

</div>

Looking in the source code, I found two solutions

```julia
> data = DataFrame(a = [1, 2, 3], b = ['a', 'b', 'c']) 
> r = collect(eachrow(data))[1]
> DataFrames.row(r)
1
> getfield(r, :row)
1

```

---

<div class="post-metadata">

**Author:** ![nalimilan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nalimilan/32/147_2.png) [@nalimilan](https://discourse.julialang.org/u/nalimilan)\
**Post date:** [December 15, 2018, 9:17pm UTC](https://discourse.julialang.org/t/dataframerow-row-number/18692/3 "2018-12-15T21:17:30Z")

</div>

`DataFrames.row` is an internal function, so better not use it. I recommend `enumerate(eachrow(data))`.

---

<div class="post-metadata">

**Author:** ![anandj](https://avatars.discourse-cdn.com/v4/letter/a/e495f1/32.png) [@anandj](https://discourse.julialang.org/u/anandj)\
**Post date:** [April 20, 2021, 8:49pm UTC](https://discourse.julialang.org/t/dataframerow-row-number/18692/4 "2021-04-20T20:49:06Z")

</div>

`rownumber`

---

<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:** [April 20, 2021, 10:55pm UTC](https://discourse.julialang.org/t/dataframerow-row-number/18692/5 "2021-04-20T22:55:20Z")

</div>

And to add `DataFrames.row` should not be used as it gives a different information (number of row in a `parent` `DataFrame`) than `rownumber` (number of row in the data frame from which the `DataFrameRow` was taken).

---

<div class="post-metadata">

**Author:** ![anandj](https://avatars.discourse-cdn.com/v4/letter/a/e495f1/32.png) [@anandj](https://discourse.julialang.org/u/anandj)\
**Post date:** [April 21, 2021, 2:07am UTC](https://discourse.julialang.org/t/dataframerow-row-number/18692/6 "2021-04-21T02:07:33Z")

</div>

example demonstrating the difference

```julia
julia> df = DataFrame(a=1:4)
4×1 DataFrame
 Row │ a
     │ Int64
─────┼───────
   1 │ 1
   2 │ 2
   3 │ 3
   4 │ 4
julia> dfv = @view df[[3,2], :]
2×1 SubDataFrame
 Row │ a
     │ Int64
─────┼───────
   1 │ 3
   2 │ 2
julia> dfr = dfv[1, :]
DataFrameRow
 Row │ a
     │ Int64
─────┼───────
   3 │ 3
julia> rownumber(dfr)
1
julia> DataFrames.row(dfr)
3

```
