# Iterating over a column and changing its value according to a condition

**URL:** <https://discourse.julialang.org/t/iterating-over-a-column-and-changing-its-value-according-to-a-condition/56285>\
**Category:** General Usage\
**Tags:** dataframes\
**Created:** [March 1, 2021, 9:31pm UTC](https://discourse.julialang.org/t/iterating-over-a-column-and-changing-its-value-according-to-a-condition/56285 "2021-03-01T21:31:44Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![statspy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/statspy/32/26630_2.png) [@statspy](https://discourse.julialang.org/u/statspy)\
**Post date:** [March 1, 2021, 9:31pm UTC](https://discourse.julialang.org/t/iterating-over-a-column-and-changing-its-value-according-to-a-condition/56285/1 "2021-03-01T21:31:45Z")

</div>

I have a .csv file with a column named “Values”

```julia

```

ID Values  
0 0.201915  
1 0.441945  
2 0.001931  
3 0.221311  
4 0.303101

```julia

```

this .csv file has 180900 rows. I need to change the Values according to a condition, like:

`if [value] < 0.030 then [value] = 0.030 else [value] AND if [value] > 0.95 then [value] = 0.95 else [Value]`

What i tried so far: (only checking values lower than 0.025 first)

```julia
i = 1
for r in eachrow(df)
global i
if r.Values < 0.025
r.Values = 0.025
i =1+1
end

```

---

<div class="post-metadata">

**Author:** ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)\
**Post date:** [March 1, 2021, 9:48pm UTC](https://discourse.julialang.org/t/iterating-over-a-column-and-changing-its-value-according-to-a-condition/56285/2 "2021-03-01T21:48:35Z")

</div>

```julia
r.Values[r.Values.<0.030] .= 0.030
r.Values[r.Values.>0.95] .= 0.95

```

Plus: replaces in place

Minus: does two passes

```julia
coerce(x) = x<0.030 ? 0.030 : x>0.95 ? 0.95 : x
r.Values .= coerce.(r.Values)

```

Plus: okay this is just plain better

```julia
coerce(x) = min(0.95, max(0.030, x))

```

Last offer.

---

<div class="post-metadata">

**Author:** ![amrods](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amrods/32/2543_2.png) [@amrods](https://discourse.julialang.org/u/amrods)\
**Post date:** [March 1, 2021, 10:42pm UTC](https://discourse.julialang.org/t/iterating-over-a-column-and-changing-its-value-according-to-a-condition/56285/3 "2021-03-01T22:42:20Z")

</div>

there is a function that does exactly that: [`clamp`](https://docs.julialang.org/en/v1/base/math/#Base.Math.clamp)  
So you can do:

```julia
transform(df, :Values => x -> clamp.(x, 0.025, 0.95))

```
