Issue 1:
I have a shuffled series with a bunch of sinvalues in float16, like this:

tdata.time_sin
110405276 -0.183105
175560878 -0.301270
...
130331292 -0.158813
6782127 -0.282471
Name: time_sin, Length: 18490389, dtype: float16

There's no NaN values, everything's a sinus of something:

tdata.time_sin[np.isnan(tdata.time_sin) == True].count()
0

But for some reason, mean() chokes somewhere in the middle like it's overflowing:

tdata.time_sin.mean()
nan

tdata.time_sin[:328720].mean()
0.0

tdata.time_sin[:328721].mean()
nan

tdata.time_sin[328719:328722]
117467643 -0.639648
85318746 0.956055
10829780 0.112000
Name: time_sin, dtype: float16

And it works fine when converted to float32:

foo = tdata.time_sin.astype(np.float32)
foo.mean()

0.20143597

Is this weird or am I missing something about float16?

This behavior persists after pickling and loading and sorting by index, although it now chokes much earlier:

zzz = pickle.load(open('timesin.pkl', 'rb'))
bb = zzz.sort_index()

bb[:74351].mean()
-0.0

bb[:74352].mean()
nan

bb[74350:74355]
749371 -0.898438
749393 -0.898438
749432 -0.898438
749447 -0.898438
749479 -0.898438
Name: time_sin, dtype: float16

Problem description

Expected Output

Output of pd.show_versions()

pd.show_versions()

INSTALLED VERSIONS

commit: None

python: 3.5.2.final.0

python-bits: 64

OS: Linux

OS-release: 4.4.0-119-generic

machine: x86_64

processor: x86_64

byteorder: little

LC_ALL: en_US.UTF-8

LANG: en_US.UTF-8

LOCALE: en_US.UTF-8

pandas: 0.22.0

pytest: None

pip: 9.0.3

setuptools: 39.0.1

Cython: None

numpy: 1.14.2

scipy: 1.0.1

pyarrow: None

xarray: None

IPython: 6.3.1

sphinx: None

patsy: None

dateutil: 2.7.2

pytz: 2018.3

blosc: None

bottleneck: None

tables: None

numexpr: None

feather: None

matplotlib: 2.2.2

openpyxl: None

xlrd: None

xlwt: None

xlsxwriter: None

lxml: None

bs4: None

html5lib: 1.0.1

sqlalchemy: None

pymysql: None

psycopg2: None

jinja2: 2.10

s3fs: None

fastparquet: None

pandas_gbq: None

pandas_datareader: None

Issue 2:
open issues & xref

(fillna) #19205

#10382

#15517

#2511

#16686

think this should be a bug. When calling the fill_na method in a pandas Series of type np.float16 it raises a ValueError, because of invalid dtype. May be there is a reason for that I can't guess, but I think it's a bug because it does not detect np.float16 as a subclass of np.floating. I'm using Python 3.4, didn't test if it also fails in Python 2. It fails for both methods, 'pad' and 'bfill'.

For np.float32 and np.float64 it works correctly. This code reproduces the error with np.float16:

import numpy as np
import pandas as pd

s = pd.Series(np.random.randn(100), dtype=np.float16)
rets = s.fillna(method='bfill')

and this is the ValueError it generates:

ValueError Traceback (most recent call last)
<ipython-input-133-5610749057ca> in <module>()
3
4 s = pd.Series(np.random.randn(100), dtype=np.float16)
----> 5 rets = s.fillna(method='bfill')

/opt/anaconda3/lib/python3.4/site-packages/pandas/core/generic.py in fillna(self, value, method, axis, inplace, limit, downcast)
2227 inplace=inplace,
2228 coerce=True,
-> 2229 downcast=downcast)
2230 else:
2231 if method is not None:

/opt/anaconda3/lib/python3.4/site-packages/pandas/core/internals.py in interpolate(self, **kwargs)
2223
2224 def interpolate(self, **kwargs):
-> 2225 return self.apply('interpolate', **kwargs)
2226
2227 def shift(self, **kwargs):

/opt/anaconda3/lib/python3.4/site-packages/pandas/core/internals.py in apply(self, f, axes, filter, do_integrity_check, **kwargs)
2190 copy=align_copy)
2191
-> 2192 applied = getattr(b, f)(**kwargs)
2193
2194 if isinstance(applied, list):

/opt/anaconda3/lib/python3.4/site-packages/pandas/core/internals.py in interpolate(self, method, axis, index, values, inplace, limit, fill_value, coerce, downcast, **kwargs)
648 fill_value=fill_value,
649 coerce=coerce,
--> 650 downcast=downcast)
651 # try an interp method
652 try:

/opt/anaconda3/lib/python3.4/site-packages/pandas/core/internals.py in _interpolate_with_fill(self, method, axis, inplace, limit, fill_value, coerce, downcast)
693 limit=limit,
694 fill_value=fill_value,
--> 695 dtype=self.dtype)
696 values = self._try_coerce_result(values)
697

/opt/anaconda3/lib/python3.4/site-packages/pandas/core/common.py in interpolate_2d(values, method, axis, limit, fill_value, dtype)
1576 values = transf(pad_2d(transf(values), limit=limit, mask=mask, dtype=dtype))
1577 else:
-> 1578 values = transf(backfill_2d(transf(values), limit=limit, mask=mask, dtype=dtype))
1579
1580 # reshape back

/opt/anaconda3/lib/python3.4/site-packages/pandas/core/common.py in backfill_2d(values, limit, mask, dtype)
1378
1379 if _method is None:
-> 1380 raise ValueError('Invalid dtype for backfill_2d [%s]' % dtype.name)
1381
1382 if mask is None:

ValueError: Invalid dtype for backfill_2d [float16]

And my guess is that the problem is this part of the code, I can debug it once you confirm this is a bug:

https://github.com/pydata/pandas/blob/master/pandas/core/common.py#L2459