# Creating dataframe with column name that is a variable

**URL:** https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248
**Category:** General Usage
**Created:** [March 30, 2021, 4:30pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248 "2021-03-30T16:30:26Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![waforbes](https://avatars.discourse-cdn.com/v4/letter/w/6bbea6/32.png) [@waforbes](https://discourse.julialang.org/u/waforbes)
#### Post date: [March 30, 2021, 4:30pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248/1 "2021-03-30T16:30:26Z")

</div>

All of the other columns are correct, i.e. I want “StartPoint” to be the name of the column and it has the data in the variable **start\_space**. Below, **param** is a string variable. How do I tell it that I want the column name to be the value of the string variable? For example, when **param** = “diffusion”, I want the column name to be “diffusion” based on the **param** variable.

speed\_df = DataFrame(StartPoint = start\_space, EndPoint = end\_space,  
TimeInterval = time\_interval, DistanceInterval = distance\_interval,  
Speed = speed, param = key)

---

<div class="post-metadata">

### Author: ![waforbes](https://avatars.discourse-cdn.com/v4/letter/w/6bbea6/32.png) [@waforbes](https://discourse.julialang.org/u/waforbes)
#### Post date: [March 30, 2021, 4:34pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248/2 "2021-03-30T16:34:42Z")

</div>

Sorry, this is wrong. Given that it didn’t work above, I should have tried

speed\_df = rename!(speed\_df, :param =\> param).

**Edit: Below is wrong.**

I even tried

speed\_df = rename!(speed\_df, :param =\> key),

but it returned with

> LoadError: MethodError: no method matching rename!(::DataFrame, ::Vector{Pair{Symbol, Float64}})
> 
> Closest candidates are:
> 
> rename!(::AbstractDataFrame, !Matched::AbstractVector{Symbol}; makeunique) at /home/wesley/.julia/packages/DataFrames/zXEKU/src/abstractdataframe/abstractdataframe.jl:170
> 
> rename!(::AbstractDataFrame, !Matched::AbstractVector{var"#s3"} where var"#s3"\<:AbstractString; makeunique) at /home/wesley/.julia/packages/DataFrames/zXEKU/src/abstractdataframe/abstractdataframe.jl:176
> 
> rename!(::AbstractDataFrame, !Matched::AbstractVector{Pair{Symbol, Symbol}}) at /home/wesley/.julia/packages/DataFrames/zXEKU/src/abstractdataframe/abstractdataframe.jl:182
> 
> …
> 
> in expression starting at /home/wesley/repos/pde/juliatest.jl:149
> 
> rename!(df::DataFrame, args::Pair{Symbol, Float64}) at abstractdataframe.jl:208
> 
> calc\_speed(df::DataFrame, h::Float64, k::Float64, param::String, key::Float64) at juliatest.jl:86
> 
> process(a::Int64, b::Int64, T::Int64, t\_steps::Int64, param::String, r\_start::Float64, r\_end::Int64, r\_length::Int64) at juliatest.jl:142
> 
> top-level scope at juliatest.jl:149
> 
> eval at boot.jl:360 [inlined]
> 
> include\_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String) at loading.jl:1094

---

<div class="post-metadata">

### Author: ![oheil](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oheil/32/220745_2.png) [@oheil](https://discourse.julialang.org/u/oheil)
#### Post date: [March 30, 2021, 4:42pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248/3 "2021-03-30T16:42:10Z")

</div>

I am not sure if I understand your question properly, but I try:

```julia
julia> using DataFrames

julia> df=DataFrame( A = [1,2,3] , B = [4,5,6] )
3×2 DataFrame
 Row │ A B
     │ Int64 Int64
─────┼──────────────
   1 │ 1 4
   2 │ 2 5
   3 │ 3 6

julia> colname="X"
"X"

julia> rename!(df,:B => colname )
3×2 DataFrame
 Row │ A X
     │ Int64 Int64
─────┼──────────────
   1 │ 1 4
   2 │ 2 5
   3 │ 3 6

```

Is this what you like to achieve?

---

<div class="post-metadata">

### Author: ![waforbes](https://avatars.discourse-cdn.com/v4/letter/w/6bbea6/32.png) [@waforbes](https://discourse.julialang.org/u/waforbes)
#### Post date: [March 30, 2021, 4:46pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248/4 "2021-03-30T16:46:18Z")

</div>

Yes. You’ve understood correctly.

---

<div class="post-metadata">

### Author: ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)
#### Post date: [March 30, 2021, 4:46pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248/5 "2021-03-30T16:46:43Z")

</div>

How about:

```julia
julia> param = :hello
:hello

julia> df = DataFrame(Dict(:a => [1, 2, 3], param=>[4, 5, 6]))
3×2 DataFrame
 Row │ a hello 
     │ Int64 Int64 
─────┼──────────────
   1 │ 1 4
   2 │ 2 5
   3 │ 3 6

```

---

<div class="post-metadata">

### Author: ![waforbes](https://avatars.discourse-cdn.com/v4/letter/w/6bbea6/32.png) [@waforbes](https://discourse.julialang.org/u/waforbes)
#### Post date: [March 30, 2021, 4:53pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248/6 "2021-03-30T16:53:02Z")

</div>

Because I corrected my rename, it does yield the desired result.

[rdeits](https://discourse.julialang.org/u/rdeits),

Is there a way to make it work in my DataFrame definition? It seems like I need to tell Julia to not take the param literally but use the param variable value.

---

<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: [March 30, 2021, 5:14pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248/7 "2021-03-30T17:14:09Z")

</div>

You can do this

```julia
param = "newvar"
julia> using DataFrames

julia> param = "newvar";

julia> DataFrame("StartPoint" => [1, 2], param => [3, 4])
2×2 DataFrame
 Row │ StartPoint newvar 
     │ Int64 Int64  
─────┼────────────────────
   1 │ 1 3
   2 │ 2 4

```

---

<div class="post-metadata">

### Author: ![waforbes](https://avatars.discourse-cdn.com/v4/letter/w/6bbea6/32.png) [@waforbes](https://discourse.julialang.org/u/waforbes)
#### Post date: [March 30, 2021, 5:23pm UTC](https://discourse.julialang.org/t/creating-dataframe-with-column-name-that-is-a-variable/58248/8 "2021-03-30T17:23:31Z")

</div>

Thanks for the replies, everyone.
