BUG: unexpected behaviour using `.sample` without replacement and with weights as a series
- [x] I have checked that this issue has not already been reported.

- [x] I have confirmed this bug exists on the latest version of pandas.

- [x] (optional) I have confirmed this bug exists on the master branch of pandas.

---

#### Code Sample

```python
import pandas as pd

elems = [0, 1, 2, 3, 4]
series_test = pd.Series(elems)
long_bad_weights = [0.1, 0.2] * 3
long_bad_weights_series = pd.Series([0.1, 0.2] * 3)
short_bad_weights_series = pd.Series([0.1, 0.2])

### Case 1: Weights passed in as a list
# throws pandas error - if weight list is too long or short, also throws with replace=True and replace=False
series_test.sample(weights=long_bad_weights)

### Case 2: Weights passed in as a series, with replace=True
series_test.sample(weights=long_bad_weights_series)  # throws no error
series_test.sample(n=3, weights=short_bad_weights_series, replace=True)  # throws no error
series_test.sample(n=3, weights=long_bad_weights_series, replace=True)  # throws no error

### Case 3: Weights passed in as a series, with replace=False
series_test.sample(n=3, weights=long_bad_weights_series, replace=False)  # throws no error
series_test.sample(n=3, weights=short_bad_weights_series, replace=False)  # throws numpy error
```

#### Problem description

Passing in weights that do not match the length of the axis to be sampled throws a pandas error (Case 1). However, if passing in weights as a series, `.sample` accepts it despite unequal lengths. 

This behaviour seems rather inconsistent to me. It results an error possibly being thrown by numpy, _if the weights are too short_, depending on whether `replace=True` or `replace=False` (Case 2, Case 3). 

In the code for `.sample` with weights passed in as a series, we reindex the weights, leading to `np.nan`s if the weights were too short.

https://github.com/pandas-dev/pandas/blob/c2a96c644e51f4d164b657240b7bed5f39fd349c/pandas/core/generic.py#L5200-L5202

This can later throw an error from numpy, since random.choice doesn't accept sampling with replacement if `np.nan` is in the weights.


**Case 1 pandas error**
```
Traceback (most recent call last):
  File "/python-scratchpad/main.py", line 11, in <module>
    df_test.sample(weights=long_bad_weights)
  File "/python-scratchpad/venv/lib/python3.8/site-packages/pandas/core/generic.py", line 4950, in sample
    raise ValueError(
ValueError: Weights and axis to be sampled must be of same length
```
**Case 3 numpy error**
```
Traceback (most recent call last):
  File "/repositories/python-scratchpad/main.py", line 20, in <module>
    series_test.sample(n=3, weights=short_bad_weights_series, replace=False)  # throws numpy error
  File "/repositories/python-scratchpad/venv/lib/python3.8/site-packages/pandas/core/generic.py", line 4993, in sample
    locs = rs.choice(axis_length, size=n, replace=replace, p=weights)
  File "mtrand.pyx", line 961, in numpy.random.mtrand.RandomState.choice
ValueError: Fewer non-zero entries in p than size
```

#### Expected Output

I'd expect pandas to throw a weight length error, no matter the dtype the weights are passed in as. Is there a reason for accepting weights as a series regardless of length? 

#### Output of ``pd.show_versions()``

<details>

```INSTALLED VERSIONS
------------------
commit           : db08276bc116c438d3fdee492026f8223584c477
python           : 3.8.0.final.0
python-bits      : 64
OS               : Darwin
OS-release       : 18.7.0
Version          : Darwin Kernel Version 18.7.0: Tue Aug 20 16:57:14 PDT 2019; root:xnu-4903.271.2~2/RELEASE_X86_64
machine          : x86_64
processor        : i386
byteorder        : little
LC_ALL           : None
LANG             : None
LOCALE           : None.UTF-8
pandas           : 1.1.3
numpy            : 1.19.2
pytz             : 2020.1
dateutil         : 2.8.1
pip              : 20.2.3
setuptools       : 50.3.1
Cython           : None
pytest           : None
hypothesis       : None
sphinx           : None
blosc            : None
feather          : None
xlsxwriter       : None
lxml.etree       : None
html5lib         : None
pymysql          : None
psycopg2         : None
jinja2           : None
IPython          : None
pandas_datareader: None
bs4              : None
bottleneck       : None
fsspec           : None
fastparquet      : None
gcsfs            : None
matplotlib       : None
numexpr          : None
odfpy            : None
openpyxl         : None
pandas_gbq       : None
pyarrow          : None
pytables         : None
pyxlsb           : None
s3fs             : None
scipy            : None
sqlalchemy       : None
tables           : None
tabulate         : None
xarray           : None
xlrd             : None
xlwt             : None
numba            : None
```

</details>
