0.20.3 backports
First round of backports. I'll just cherry-pick the remaining PRs to this branch once they're merged.
@TomAugspurger FYI

seems circleci is refusing to run PR's for most folks (though your's and mine still run). maybe something changed on there side. Yeah, I was looking into that last night. The error message isn't that informative "An error occurred while fetching information about this build from GitHub."

The doc build timed out on this since I didn't pick the commit that pinned sphinx to 1.5*. Going to wait till Appveyor finishes and then push, merge, and tag the release. # [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=h1) Report
> :exclamation: No coverage uploaded for pull request base (`0.20.x@2814061`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
> The diff coverage is `96.42%`.

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

```diff
@@            Coverage Diff            @@
##             0.20.x   #16841   +/-   ##
=========================================
  Coverage          ?   90.54%           
=========================================
  Files             ?      161           
  Lines             ?    49185           
  Branches          ?        0           
=========================================
  Hits              ?    44537           
  Misses            ?     4648           
  Partials          ?        0
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `88.24% <96.42%> (?)` | |
| #single | `40.2% <32.14%> (?)` | |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/io/excel.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL2V4Y2VsLnB5) | `61.68% <ø> (ø)` | |
| [pandas/core/indexing.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhpbmcucHk=) | `94.01% <ø> (ø)` | |
| [pandas/io/formats/style.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL2Zvcm1hdHMvc3R5bGUucHk=) | `100% <ø> (ø)` | |
| [pandas/core/internals.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW50ZXJuYWxzLnB5) | `93.4% <ø> (ø)` | |
| [pandas/core/indexes/timedeltas.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy90aW1lZGVsdGFzLnB5) | `90.58% <100%> (ø)` | |
| [pandas/core/indexes/period.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9wZXJpb2QucHk=) | `92.74% <100%> (ø)` | |
| [pandas/core/indexes/multi.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9tdWx0aS5weQ==) | `96.67% <100%> (ø)` | |
| [pandas/core/categorical.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvY2F0ZWdvcmljYWwucHk=) | `95.49% <100%> (ø)` | |
| [pandas/core/dtypes/common.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZHR5cGVzL2NvbW1vbi5weQ==) | `94.79% <100%> (ø)` | |
| [pandas/io/parsers.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL3BhcnNlcnMucHk=) | `95.35% <100%> (ø)` | |
| ... and [13 more](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/16841?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/16841?src=pr&el=footer). Last update [2814061...c561895](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 # [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=h1) Report
> :exclamation: No coverage uploaded for pull request base (`0.20.x@2814061`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
> The diff coverage is `96.42%`.

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

```diff
@@            Coverage Diff            @@
##             0.20.x   #16841   +/-   ##
=========================================
  Coverage          ?   90.54%           
=========================================
  Files             ?      161           
  Lines             ?    49185           
  Branches          ?        0           
=========================================
  Hits              ?    44537           
  Misses            ?     4648           
  Partials          ?        0
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `88.24% <96.42%> (?)` | |
| #single | `40.2% <32.14%> (?)` | |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/io/excel.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL2V4Y2VsLnB5) | `61.68% <ø> (ø)` | |
| [pandas/core/indexing.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhpbmcucHk=) | `94.01% <ø> (ø)` | |
| [pandas/io/formats/style.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL2Zvcm1hdHMvc3R5bGUucHk=) | `100% <ø> (ø)` | |
| [pandas/core/internals.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW50ZXJuYWxzLnB5) | `93.4% <ø> (ø)` | |
| [pandas/compat/numpy/\_\_init\_\_.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvbXBhdC9udW1weS9fX2luaXRfXy5weQ==) | `94.11% <100%> (ø)` | |
| [pandas/compat/numpy/function.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvbXBhdC9udW1weS9mdW5jdGlvbi5weQ==) | `93.12% <100%> (ø)` | |
| [pandas/compat/pickle\_compat.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvbXBhdC9waWNrbGVfY29tcGF0LnB5) | `69.51% <100%> (ø)` | |
| [pandas/io/pytables.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL3B5dGFibGVzLnB5) | `93.29% <100%> (ø)` | |
| [pandas/core/reshape/merge.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvcmVzaGFwZS9tZXJnZS5weQ==) | `93.96% <100%> (ø)` | |
| [pandas/io/formats/format.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL2Zvcm1hdHMvZm9ybWF0LnB5) | `96.03% <100%> (ø)` | |
| ... and [13 more](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/16841?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/16841?src=pr&el=footer). Last update [2814061...7efa726](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 # [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=h1) Report
> :exclamation: No coverage uploaded for pull request base (`0.20.x@2814061`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
> The diff coverage is `96.42%`.

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

```diff
@@            Coverage Diff            @@
##             0.20.x   #16841   +/-   ##
=========================================
  Coverage          ?   90.54%           
=========================================
  Files             ?      161           
  Lines             ?    49185           
  Branches          ?        0           
=========================================
  Hits              ?    44537           
  Misses            ?     4648           
  Partials          ?        0
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `88.24% <96.42%> (?)` | |
| #single | `40.2% <32.14%> (?)` | |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/io/formats/style.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL2Zvcm1hdHMvc3R5bGUucHk=) | `100% <ø> (ø)` | |
| [pandas/io/excel.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL2V4Y2VsLnB5) | `61.68% <ø> (ø)` | |
| [pandas/core/internals.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW50ZXJuYWxzLnB5) | `93.4% <ø> (ø)` | |
| [pandas/core/indexing.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhpbmcucHk=) | `94.01% <ø> (ø)` | |
| [pandas/core/indexes/multi.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9tdWx0aS5weQ==) | `96.67% <100%> (ø)` | |
| [pandas/core/indexes/period.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9wZXJpb2QucHk=) | `92.74% <100%> (ø)` | |
| [pandas/compat/pickle\_compat.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvbXBhdC9waWNrbGVfY29tcGF0LnB5) | `69.51% <100%> (ø)` | |
| [pandas/io/pytables.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL3B5dGFibGVzLnB5) | `93.29% <100%> (ø)` | |
| [pandas/core/indexes/timedeltas.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy90aW1lZGVsdGFzLnB5) | `90.58% <100%> (ø)` | |
| [pandas/io/formats/format.py](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree#diff-cGFuZGFzL2lvL2Zvcm1hdHMvZm9ybWF0LnB5) | `96.03% <100%> (ø)` | |
| ... and [13 more](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/16841?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/16841?src=pr&el=footer). Last update [2814061...7efa726](https://codecov.io/gh/pandas-dev/pandas/pull/16841?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 All green. Just pushed the doc updates. Merging.