Convert Pandas column containing NaNs to dtype `int` Convert Pandas column containing NaNs to dtype `int` python python

Convert Pandas column containing NaNs to dtype `int`


The lack of NaN rep in integer columns is a pandas "gotcha".

The usual workaround is to simply use floats.


In version 0.24.+ pandas has gained the ability to hold integer dtypes with missing values.

Nullable Integer Data Type.

Pandas can represent integer data with possibly missing values using arrays.IntegerArray. This is an extension types implemented within pandas. It is not the default dtype for integers, and will not be inferred; you must explicitly pass the dtype into array() or Series:

arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype())pd.Series(arr)0      11      22    NaNdtype: Int64

For convert column to nullable integers use:

df['myCol'] = df['myCol'].astype('Int64')


My use case is munging data prior to loading into a DB table:

df[col] = df[col].fillna(-1)df[col] = df[col].astype(int)df[col] = df[col].astype(str)df[col] = df[col].replace('-1', np.nan)

Remove NaNs, convert to int, convert to str and then reinsert NANs.

It's not pretty but it gets the job done!