# How to edit row values of a dataframe column based on condition using query.jl

**URL:** <https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437>\
**Category:** Data\
**Created:** [July 16, 2019, 5:36pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437 "2019-07-16T17:36:42Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![vivekraj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vivekraj/32/2560_2.png) [@vivekraj](https://discourse.julialang.org/u/vivekraj)\
**Post date:** [July 16, 2019, 5:36pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437/1 "2019-07-16T17:36:43Z")

</div>

i have filtered unique values from a column :CarCompany from dataframe:

df |\> @map(\_.CarCompany) |\> @unique() |\> collect;  
the output shows fields with spelling mistakes:  
28-element Array{SubString{String},1}:  
“alfa-romero”  
“audi”  
“bmw”  
“chevrolet”  
“dodge”  
“honda”  
“isuzu”  
“jaguar”  
“maxda”  
“mazda”  
“buick”  
“mercury”  
“mitsubishi”  
⋮  
“plymouth”  
“porsche”  
“porcshce”  
“renault”  
“saab”  
“subaru”  
“toyota”  
“toyouta”  
“vokswagen”  
“volkswagen”  
“vw”  
“volvo”

How to edit the rows with spelling mistake using Query.jl ?

---

<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:** [July 17, 2019, 1:26pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437/2 "2019-07-17T13:26:22Z")

</div>

Please make sure that you quote your code with triple backticks, and ideally include an [MWE](https://discourse.julialang.org/t/psa-make-it-easier-to-help-you/14757) with your question.

DataFrames columns can just be treated as vectors so you can broadcast a `replace` string operation:

```julia
julia> using DataFrames

julia> df = DataFrame(CarCompany = rand(["porsche", "porcshce"], 10))

julia> df.CarCompany = replace.(df.CarCompany, Ref("porcshce" => "porsche"))

julia> unique(df.CarCompany)
1-element Array{String,1}: 
"porsche"

```

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [July 17, 2019, 1:33pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437/3 "2019-07-17T13:33:16Z")

</div>

What is the `Ref` needed for? Is there something in the documentation for this?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [July 17, 2019, 1:38pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437/4 "2019-07-17T13:38:35Z")

</div>

> [@affans](#):
>
> What is the `Ref` needed for?

Basically to make it look like a scalar when it comes to broadcasting because pairs (perhaps dubiously) have shape:

```julia
julia> (1 => 2) .+ [3, 4]
2-element Array{Int64,1}:
 4
 6

```

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [July 17, 2019, 1:44pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437/5 "2019-07-17T13:44:01Z")

</div>

Thanks, but I am still (very) confused. The `ref` makes what look like a scaler? What happens when I `Ref` your example? (Sorry a little off-topic here)

> julia\> (1 =\> 2) .+ [3, 4]  
> 2-element Array{Int64,1}:  
> 4  
> 6
> 
> julia\> Ref((1 =\> 2)) .+ [3, 4]  
> ERROR: MethodError: no method matching +(::Pair{Int64,Int64}, ::Int64)

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [July 17, 2019, 1:57pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437/6 "2019-07-17T13:57:14Z")

</div>

Exactly, then it is not broadcasted over.

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [July 17, 2019, 6:27pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437/7 "2019-07-17T18:27:18Z")

</div>

Okay, last question. Why do we need to `Ref` in the `replace` function? Maybe this is a `DataFrames` specific question.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [July 17, 2019, 6:47pm UTC](https://discourse.julialang.org/t/how-to-edit-row-values-of-a-dataframe-column-based-on-condition-using-query-jl/26437/8 "2019-07-17T18:47:30Z")

</div>

Because we want the replacement (which is a pair) to apply to all elements in the vector of strings. Otherwise broadcasting would try to fuse the pair with the vector.
