If your DF is big, you’re probably not seeing the missing numbers. But you can use the fillna function to help
>>> df = pd.DataFrame(data=data, columns=['id', 'birth_year'])
>>> df
id birth_year
0 1 1989.0
1 2 1990.0
2 3 NaN
>>> df.birth_year
0 1989.0
1 1990.0
2 NaN
Name: birth_year, dtype: float64
>>> df.birth_year.astype(int)
ERROR |2018.01.29T18:14:04|default:183: Unhandled Terminal Exception
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/devtools/uat/anaconda4321/lib/python3.6/site-
packages/pandas/util/_decorators.py", line 91, in wrapper
return func(*args, **kwargs)
File "/usr/local/devtools/uat/anaconda4321/lib/python3.6/site-
packages/pandas/core/generic.py", line 3410, in astype
**kwargs)
File "/usr/local/devtools/uat/anaconda4321/lib/python3.6/site-
packages/pandas/core/internals.py", line 3224, in astype
return self.apply('astype', dtype=dtype, **kwargs)
File "/usr/local/devtools/uat/anaconda4321/lib/python3.6/site-
packages/pandas/core/internals.py", line 3091, in apply
applied = getattr(b, f)(**kwargs)
File "/usr/local/devtools/uat/anaconda4321/lib/python3.6/site-
packages/pandas/core/internals.py", line 471, in astype
**kwargs)
File "/usr/local/devtools/uat/anaconda4321/lib/python3.6/site-
packages/pandas/core/internals.py", line 521, in _astype
values = astype_nansafe(values.ravel(), dtype, copy=True)
File "/usr/local/devtools/uat/anaconda4321/lib/python3.6/site-
packages/pandas/core/dtypes/cast.py", line 620, in astype_nansafe
raise ValueError('Cannot convert non-finite values (NA or inf) to '
ValueError: Cannot convert non-finite values (NA or inf) to integer
>>> df = df.fillna(0)
>>> df.birth_year.astype(int)
0 1989
1 1990
2 0
Name: birth_year, dtype: int64