Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I resolve - TypeError: cannot safely cast non-equivalent float64 to int64?

Tags:

python

pandas

I'm trying to convert a few float columns to int in a DF but I'm getting above error. I've tried both to convert it as well as to fillna to 0(which I prefer not to do, as in my dataset the NA is required).

What am I doing wrong? I've tried both:

orginalData[NumericColumns] = orginalData[NumericColumns].astype('Int64')
#orginalData[NumericColumns] = orginalData[NumericColumns].fillna(0).astype('Int64')

but it keeps resulting in the same error

TypeError: cannot safely cast non-equivalent float64 to int64

What can I do to convert the columns?

like image 272
Lostsoul Avatar asked Jul 14 '20 16:07

Lostsoul


2 Answers

No need to replace nan. You can pass to Int64 safely by doing:

df['A'] = np.floor(pd.to_numeric(df['A'], errors='coerce')).astype('Int64')

Your nans will be replaced with <NA>. Source

You need to have pandas >.24 version.

like image 136
Hrvoje Avatar answered Nov 18 '22 14:11

Hrvoje


import numpy as np
orginalData[NumericColumns] = orginalData[NumericColumns].fillna(0).astype(np.int64, errors='ignore')

For NaNs you need to replace the NaNs with 0, then do the type casting

like image 20
bigbounty Avatar answered Nov 18 '22 16:11

bigbounty