# Replace all NaN's with zeros in DataFrame

**URL:** <https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001>\
**Category:** General Usage\
**Tags:** dataframes\
**Created:** [March 27, 2018, 5:47am UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001 "2018-03-27T05:47:15Z")\
**Posts on this page:** 12\
**Page:** 2

<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:** [August 3, 2021, 4:57pm UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/22 "2021-08-03T16:57:17Z")

</div>

Or `clamp.(df, 0.0, Inf)` which is nice and explicit (at least if you know what “clamp” means I guess…)

---

<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 3, 2021, 5:01pm UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/23 "2021-08-03T17:01:15Z")

</div>

In short - data frame supports broadcasting in full 😄.

---

<div class="post-metadata">

**Author:** ![alex-s-gardner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alex-s-gardner/32/30210_2.png) [@alex-s-gardner](https://discourse.julialang.org/u/alex-s-gardner)\
**Post date:** [October 15, 2022, 12:47am UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/24 "2022-10-15T00:47:41Z")

</div>

It would sure be nice to have a function `replacenan(df,fillwith)` that could iterate through a df finding all Floats with NaNs and replacing them with `fillwith`. I have a slightly complex dataframe:

 ![Screen Shot 2022-10-14 at 5.45.12 PM](https://global.discourse-cdn.com/julialang/original/3X/0/c/0cbb4cf4647208f86bd8b1f28cf54e6744ea64d8.png)

And I’ve been trying to figure out how to replace all on the nan’s so I can export as a Parquet file.

I’m sure people have written this… seems like a common task

---

<div class="post-metadata">

**Author:** ![Jollywatt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jollywatt/32/202198_2.png) [@Jollywatt](https://discourse.julialang.org/u/Jollywatt)\
**Post date:** [October 15, 2022, 1:48am UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/25 "2022-10-15T01:48:18Z")

</div>

> [@alex-s-gardner](#):
>
> It would sure be nice to have a function `replacenan(df,fillwith)` that could iterate through a df finding all Floats with NaNs and replacing them with `fillwith`.

Try

```julia
replace.(df, NaN => 0)

```

which basically applies `replace(::Array, NaN => 0)` to each cell. Use `replace!` for in-place version. Nice, huh?

---

<div class="post-metadata">

**Author:** ![alex-s-gardner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alex-s-gardner/32/30210_2.png) [@alex-s-gardner](https://discourse.julialang.org/u/alex-s-gardner)\
**Post date:** [October 15, 2022, 5:01am UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/26 "2022-10-15T05:01:28Z")

</div>

@Jollywatt that is a dream! Love it.

---

<div class="post-metadata">

**Author:** ![jlEgan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jlegan/32/47991_2.png) [@jlEgan](https://discourse.julialang.org/u/jlEgan)\
**Post date:** [March 23, 2023, 3:38pm UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/27 "2023-03-23T15:38:13Z")

</div>

Not perfect but this is how I did it…  
transform(addCols, nanCols .=\> ByRow(x → replace.(x, r"NaN"=\> 0)) .=\> nanCols)

---

<div class="post-metadata">

**Author:** ![jlEgan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jlegan/32/47991_2.png) [@jlEgan](https://discourse.julialang.org/u/jlEgan)\
**Post date:** [March 23, 2023, 4:18pm UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/28 "2023-03-23T16:18:19Z")

</div>

apparently this work in all cases except NaN … oops

---

<div class="post-metadata">

**Author:** ![Sandy45](https://avatars.discourse-cdn.com/v4/letter/s/3ec8ea/32.png) [@Sandy45](https://discourse.julialang.org/u/Sandy45)\
**Post date:** [April 16, 2023, 11:44pm UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/29 "2023-04-16T23:44:45Z")

</div>

@bkamins This will fail in case if df has missings right? how to handle such scenarios?

---

<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:** [April 17, 2023, 5:27am UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/30 "2023-04-17T05:27:04Z")

</div>

> [@bkamins](#):
>
> `ifelse.(df .< 0, 0, df)`

You mean the above? But what do you want to do with `missings`? Keep them being `missing`? In this case you need:

```julia
ifelse.(isless.(df, 0), 0, df)

```

(this works in this specific case, in case of other conditions you would need double condition or `passmissing`)

---

<div class="post-metadata">

**Author:** ![Sandy45](https://avatars.discourse-cdn.com/v4/letter/s/3ec8ea/32.png) [@Sandy45](https://discourse.julialang.org/u/Sandy45)\
**Post date:** [April 17, 2023, 3:15pm UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/31 "2023-04-17T15:15:40Z")

</div>

> [@bkamins](#):
>
> df .= ifelse.(isnan.(df), 0, df)

I apologize for not mentioning this earlier but below operation will fail in case there are any missing’s in df columns.

df .= ifelse.(isnan.(df), 0, df)

---

<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:** [April 17, 2023, 4:40pm UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/32 "2023-04-17T16:40:56Z")

</div>

I assume you want to keep `missing` to be still `missing`

```julia
df .= ifelse.(isnan.(coalesce.(df, false)), 0, df)

```

---

<div class="post-metadata">

**Author:** ![Sandy45](https://avatars.discourse-cdn.com/v4/letter/s/3ec8ea/32.png) [@Sandy45](https://discourse.julialang.org/u/Sandy45)\
**Post date:** [April 18, 2023, 3:19am UTC](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001/33 "2023-04-18T03:19:46Z")

</div>

Thank You!!

[Previous page](https://discourse.julialang.org/t/replace-all-nans-with-zeros-in-dataframe/10001.md?page=1)
