# Nested access of DataFrame

**URL:** <https://discourse.julialang.org/t/nested-access-of-dataframe/63525>\
**Category:** New to Julia\
**Tags:** dataframes\
**Created:** [June 25, 2021, 3:43am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525 "2021-06-25T03:43:16Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)\
**Post date:** [June 25, 2021, 3:43am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/1 "2021-06-25T03:43:16Z")

</div>

Hi,

I’m looking forward to dealing with nested access of DataFrame.  
For example,

```nohighlight
julia> using DataFrames

julia> xs = [Dict(:x => 1, :y => 1)]
1-element Vector{Dict{Symbol, Int64}}:
 Dict(:y => 1, :x => 1)

julia> push!(xs, Dict(:x => 2, :y => 2))
2-element Vector{Dict{Symbol, Int64}}:
 Dict(:y => 1, :x => 1)
 Dict(:y => 2, :x => 2)

julia> df = DataFrame(data=xs)
2×1 DataFrame
 Row │ data
     │ Dict…
─────┼────────────────────
   1 │ Dict(:y=>1, :x=>1)
   2 │ Dict(:y=>2, :x=>2)

```

Now, I’d like to access data as `[df[i][:x] for i in 1:size(df)[1]]` and `[df[i][:y] for i in 1:size(df)[1]]`.  
Is there any convenient solution like `df.x`?

---

<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:** [June 25, 2021, 5:55am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/2 "2021-06-25T05:55:06Z")

</div>

If I understand you correctly your comprehension should be `[i[:x] for i in df.data]`

---

<div class="post-metadata">

**Author:** ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)\
**Post date:** [June 25, 2021, 6:12am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/3 "2021-06-25T06:12:04Z")

</div>

Oh, you’re correct.  
In addition to this, I wish that there is an alternative (and easy) way, e.g., `df.x == [i[:x] for i in df.data]`.

---

<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:** [June 25, 2021, 6:18am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/4 "2021-06-25T06:18:56Z")

</div>

Do you want:

```julia
getindex.(df.data, :x)

```

?

---

<div class="post-metadata">

**Author:** ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)\
**Post date:** [June 25, 2021, 6:29am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/5 "2021-06-25T06:29:18Z")

</div>

Thanks for replying.  
The way you suggested seems not work for nested dict.  
For example,

```julia
xs = [Dict(:x => 1, :y => Dict(:a => 1))]
push!(xs, Dict(:x => 2, :y => Dict(:a => 2))
# df.y.a ...?

```

---

<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:** [June 25, 2021, 7:03am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/6 "2021-06-25T07:03:32Z")

</div>

> [@iHany](#):
>
> `# df.y.a ...?`

you cannot do a `getproperty` on `Dict`, instead to have to do a `getindex` as I have suggested. It is unrelated with `DataFrame` object, but how Julia Base is designed:

```julia
julia> using DataFrames

julia> xs = [Dict(:x => 1, :y => Dict(:a => 1))];

julia> push!(xs, Dict(:x => 2, :y => Dict(:a => 2)));

julia> df = DataFrame(data=xs);

julia> getindex.(getindex.(df.data, :y), :a)
2-element Vector{Int64}:
 1
 2

```

---

<div class="post-metadata">

**Author:** ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)\
**Post date:** [June 25, 2021, 7:16am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/7 "2021-06-25T07:16:54Z")

</div>

Oh, good point.  
But it is too long to access data in nested dicts.  
As you suggested, it would seem like  
`getindex.(getindex.(getindex. ...`.  
This is quite annoying. So I’m looking forward to any methods or packages that dealing with such nested dicts in easy ways.

---

<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:** [June 25, 2021, 7:24am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/8 "2021-06-25T07:24:30Z")

</div>

[GitHub - JuliaArrays/StructArrays.jl: Efficient implementation of struct arrays in Julia](https://github.com/JuliaArrays/StructArrays.jl) should be useful in your case (it does not resolve all your issues, but still should help).

---

<div class="post-metadata">

**Author:** ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)\
**Post date:** [June 25, 2021, 7:45am UTC](https://discourse.julialang.org/t/nested-access-of-dataframe/63525/9 "2021-06-25T07:45:30Z")

</div>

Oh, I’ve seen it. Ok, it may be the key of my issue 🙂  
I’ll take a look at it. Thanks!
