Reputation: 25349
I'm trying to insert NaN
values to specific indices of a numpy array. I keep getting this error:
TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'
When trying to do so with the following code.
x = np.array(range(1,11))
x = np.insert(x, 5, np.nan, axis=0)
However, I can append NaN
values to the end of the array with no problem.
x = np.array(range(1,11))
x = np.append(x, np.nan)
Why is this and how can I insert NaN values in my array?
Upvotes: 6
Views: 25158
Reputation: 20339
With x=np.array(range(1,11))
, the dtype
by default is int64
, which prevents you to insert a float.
The easiest is to force the dtype
to float directly:
x = np.array(range(1, 11), dtype=float)
With np.insert
, you're limited to the dtype
of the initial array (the temporary arrays created below the hood use the dtype
of the input).
With np.append
, however, you're actually using np.concatenate
, which creates an array with the "largest" dtype
of its inputs: in your example, x
is then cast to float
.
Note that you could simply use the np.arange
function:
x = np.arange(1, 11, dtype=float)
Upvotes: 8