BUG: replace coerces incorrect dtype
- [x] closes #12747
- [x] tests added / passed
- [x] passes `git diff upstream/master | flake8 --diff`
- [x] whatsnew entry

Found this affects more functions than I thought. Let me do it in 4 separate PRs.

1 Add numeric related tests to clarify the current behaviour (and future change)
2. Fix numeric coercion.
3. Add datetime-like tests.
4. Fix datetime-like coercion.
 ## [Current coverage](https://codecov.io/gh/pandas-dev/pandas/pull/12780?src=pr) is 85.97% (diff: 89.65%)
> Merging [#12780](https://codecov.io/gh/pandas-dev/pandas/pull/12780?src=pr) into [master](https://codecov.io/gh/pandas-dev/pandas/branch/master?src=pr) will decrease coverage by **<.01%**

```diff
@@             master     #12780   diff @@
==========================================
  Files           140        140          
  Lines         51254      51275    +21   
  Methods           0          0          
  Messages          0          0          
  Branches          0          0          
==========================================
+ Hits          44068      44085    +17   
- Misses         7186       7190     +4   
  Partials          0          0          
```

> Powered by [Codecov](https://codecov.io?src=pr). Last update [a62fdf8...f9154e8](https://codecov.io/gh/pandas-dev/pandas/compare/a62fdf8b85bcb0fcedbe9b5269625d50f4b2cdd7...f9154e8a70e128cb0b07edcc325b4444930adcf5?src=pr) after #13147 this should be slightly more standard
 @sinhrks looks pretty good, just a couple of small comments. @sinhrks status? (lgtm so far) Updated to fix the above points, and now ready for review. looks fine. still some internal things ideally should clean up. but can do later.

though couple of comments if you can address. @sinhrks I am rebasing this and will merge after testing.