# Want to add new column from string but df\[!,field\_in\] = "test" not working

**URL:** <https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227>\
**Category:** New to Julia\
**Tags:** dataframes\
**Created:** [August 23, 2022, 10:40pm UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227 "2022-08-23T22:40:39Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon69491625](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@anon69491625](https://discourse.julialang.org/u/anon69491625)\
**Post date:** [August 23, 2022, 10:40pm UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/1 "2022-08-23T22:40:39Z")

</div>

thought I’d try out adding a new column to a database from a string but something I thought should work isn’t?

```julia
using DataFrames
df = DataFrame()
field_in = "top_level"
payload = "new_one"

df[!,field_in] = payload

```

I get this error

```julia
df[!,field_in] = payload

ERROR: MethodError: no method matching setindex!(::DataFrame, ::String, ::typeof(!), ::String)
Closest candidates are:
  setindex!(::DataFrame, ::Any, ::Integer, ::Union{AbstractString, Signed, Symbol, Unsigned}) at ~/.julia/packages/DataFrames/zqFGs/src/dataframe/dataframe.jl:658
  setindex!(::DataFrame, ::AbstractVector, ::typeof(!), ::Union{AbstractString, Signed, Symbol, Unsigned}) at ~/.julia/packages/DataFrames/zqFGs/src/dataframe/dataframe.jl:639
  setindex!(::AbstractDataFrame, ::Any, ::CartesianIndex{2}) at ~/.julia/packages/DataFrames/zqFGs/src/other/broadcasting.jl:5
  ...
Stacktrace:
 [1] top-level scope
   @ REPL[7]:1

```

what I want to achieve is

```julia
1×1 DataFrame
 Row │ top_level 
     │ String    
─────┼───────────
   1 │ new_one

```

and carry on adding ie

field\_in = “middle\_level”  
payload = “another\_one”

yielding

```julia
1×2 DataFrame
 Row │ top_level middle_level 
     │ String String       
─────┼─────────────────────────
   1 │ new_one another_one

```

and carry on building it out.

what am I missing please?

---

<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:** [August 23, 2022, 11:00pm UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/2 "2022-08-23T23:00:35Z")

</div>

Make it a vector.

```julia
julia> df = DataFrame()
0×0 DataFrame

julia> df[!,field_in] = [payload]
1-element Vector{String}:
 "new_one"

julia> df
1×1 DataFrame
 Row │ top_level 
     │ String    
─────┼───────────
   1 │ new_one

```

---

<div class="post-metadata">

**Author:** ![anon69491625](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@anon69491625](https://discourse.julialang.org/u/anon69491625)\
**Post date:** [August 23, 2022, 11:09pm UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/3 "2022-08-23T23:09:15Z")

</div>

> [@pdeffebach](#):
>
> `df[!,field_in] = [payload]`

OUTSTANDING!!! thank you for such a swift solution. I can see why that works but I wouldn’t have spotted it. Thanks again for adding to my toolkit.

---

<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:** [August 24, 2022, 6:12am UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/4 "2022-08-24T06:12:33Z")

</div>

or `df[!,field_in] .= payload`

---

<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:** [August 24, 2022, 7:41am UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/5 "2022-08-24T07:41:04Z")

</div>

> [@bkamins](#):
>
> df[!,field\_in] .= payload

Fyi, in DataFrames v1.3.4 that creates an empty dataframe with 1 column:

```julia
julia> df[!,field_in] .= payload
String[]

julia> df
0×1 DataFrame

```

---

<div class="post-metadata">

**Author:** ![anon69491625](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@anon69491625](https://discourse.julialang.org/u/anon69491625)\
**Post date:** [August 24, 2022, 10:55am UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/6 "2022-08-24T10:55:45Z")

</div>

Hi there @bkamins as @rafael.guerra points out this doesn’t do what I wanted in the OP. I’m using DataFrames v1.3.4 and

```julia
df[!,field_in] .= payload

```

creates an empty dataframe with 1 column which is empty, I wanted a dataframe with 1 column that contains the value from payload.

I am watching your [juliacon 2022 video](https://www.youtube.com/watch?v=SXF4BawX-hs) which should contain a warning. I was asked to keep the noise down in a starbucks because I kept whooping everytime a new approach was unveiled. OUTSTANDING work!

---

<div class="post-metadata">

**Author:** ![anon69491625](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@anon69491625](https://discourse.julialang.org/u/anon69491625)\
**Post date:** [August 24, 2022, 11:00am UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/7 "2022-08-24T11:00:07Z")

</div>

@rafael.guerra excellent point and thank you for taking the time. I AM using DataFrames v1.3.4 and you are right but I don’t see why. Seems to me, a noob, that the broadcast transformation “.=” should have created a vector of the type String.

---

<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:** [August 24, 2022, 11:31am UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/8 "2022-08-24T11:31:35Z")

</div>

> [@anon69491625](#):
>
> creates an empty dataframe with 1 column which is empty

Ah - right. I did not see that your data frame had 0 rows before.  
Then `[payload]` is correct.

Using broadcasting keeps the number of rows in a data frame unchanged, so if it had 0 rows it still has 0 rows.

---

<div class="post-metadata">

**Author:** ![anon69491625](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@anon69491625](https://discourse.julialang.org/u/anon69491625)\
**Post date:** [August 24, 2022, 11:43am UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/9 "2022-08-24T11:43:05Z")

</div>

Hi there @bkamins, thank you for the clarification. EXCELLENT work on the juliacon video. Nicely paced, lashings of explanation that REALLY helps noobs like me coming from python. Looking forward to your Chicago workshop in 2023 and your new book [julia for data analysis](https://www.manning.com/books/julia-for-data-analysis?query=bogumil)

---

<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:** [August 24, 2022, 6:59pm UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/10 "2022-08-24T18:59:11Z")

</div>

one more thing. Another way to add a column in this case is:

```julia
insertcols!(df, :field_in => payload)

```

The reason this works is that `insertcols!` uses the same syntax as `DataFrame` constructor so it treats scalars as length 1 if data frame is empty.

---

<div class="post-metadata">

**Author:** ![anon69491625](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@anon69491625](https://discourse.julialang.org/u/anon69491625)\
**Post date:** [August 24, 2022, 7:52pm UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/12 "2022-08-24T19:52:13Z")

</div>

Hi there @bkamins not sure it works. Here’s the run I just did

```julia
using DataFrames
df = DataFrame()
field_in = "top_level"
payload = "new_one"
insertcols!(df, :field_in => payload)

```

giving a column called “field\_in”

```julia
1×1 DataFrame
 Row │ field_in 
     │ String   
─────┼──────────
   1 │ new_one

```

which is not the functionality I was after. BUT a little noob tweek…

```julia
using DataFrames
df = DataFrame()
field_in = "top_level"
payload = "new_one"
insertcols!(df, field_in => payload)

1×1 DataFrame
 Row │ top_level 
     │ String    
─────┼───────────
   1 │ new_one

julia> field_in = "middle_level"
"middle_level"

julia> payload = "middle_add"
"middle_add"

julia> insertcols!(df, field_in => payload)
1×2 DataFrame
 Row │ top_level middle_level 
     │ String String       
─────┼─────────────────────────
   1 │ new_one middle_add

julia> 

```

and all is good in the garden… AS alway thanks so much for going the extra mile to help a struggling noob. This will allow a simple noob to build out a dataframe on the fly using a simple zmq IPM flow and have it use Stipple.jl observables to represent it as a live dashboard. WHAT FUN!! I am loving this stuff

so if I wanted to remotely send a list of symbols to the df I could do this

```julia
using DataFrames
df = DataFrame()
field_in = "sym"
payload = ["AAPL","AMZN","C","WAM","ERE"]

insertcols!(df, field_in => payload)
5×1 DataFrame
 Row │ middle_level 
     │ String       
─────┼──────────────
   1 │ AAPL
   2 │ AMZN
   3 │ C
   4 │ WAM
   5 │ ERE

```

---

<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:** [August 24, 2022, 8:17pm UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/13 "2022-08-24T20:17:47Z")

</div>

`:field_in` would be a verbatim column name, while `field_in` would reference a variable with a column name. I understand you wanted the latter. So I hope all is now what you want.

---

<div class="post-metadata">

**Author:** ![anon69491625](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@anon69491625](https://discourse.julialang.org/u/anon69491625)\
**Post date:** [August 24, 2022, 8:30pm UTC](https://discourse.julialang.org/t/want-to-add-new-column-from-string-but-df-field-in-test-not-working/86227/14 "2022-08-24T20:30:49Z")

</div>

all is good in the garden, I like both the approaches. julia is a fine language and your DataFrames.jl and DataFramesMeta.jl make it a joy to explore.  
thanks again.
