BUG: replace of numeric by string / dtype coversion (GH15743)
 - [x] closes #15743
 - [x] test added / passed
 - [x] passes ``git diff upstream/master --name-only -- '*.py' | flake8 --diff``
 - [x] whatsnew entry

# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=h1) Report
> Merging [#15812](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/1dab800b412be3613e8f666eb1be88458b631312?src=pr&el=desc) will **decrease** coverage by `0.01%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/15812/graphs/tree.svg?width=650&height=150&src=pr&token=eZ4WkYLtcO)](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #15812      +/-   ##
==========================================
- Coverage   90.99%   90.97%   -0.02%     
==========================================
  Files         143      143              
  Lines       49403    49418      +15     
==========================================
+ Hits        44956    44960       +4     
- Misses       4447     4458      +11
```


| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/core/missing.py](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvbWlzc2luZy5weQ==) | `84.27% <100%> (-0.63%)` | :arrow_down: |
| [pandas/types/cast.py](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=tree#diff-cGFuZGFzL3R5cGVzL2Nhc3QucHk=) | `85.6% <100%> (+0.28%)` | :arrow_up: |
| [pandas/io/gbq.py](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=tree#diff-cGFuZGFzL2lvL2dicS5weQ==) | `25% <0%> (-58.34%)` | :arrow_down: |
| [pandas/core/frame.py](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZnJhbWUucHk=) | `97.56% <0%> (-0.1%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=footer). Last update [1dab800...e6e4971](https://codecov.io/gh/pandas-dev/pandas/pull/15812?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments). thanks @ucals I pushed a more generalized soln to your branch.

This is actually a big area have been meaning to fix. There are quite a lot of subtleties w.r.t. numpy (and pandas) coercions.  ok ping on green. (note if you feel up to adding more test cases to ``pandas/tests/types/test_cast.py`` go for it (could also be a follow). thanks @ucals 

as I said if you want to add some followup tests, pls do.