natsuki_2002
natsuki_2002

Reputation: 25349

Python: numpy.insert NaN value

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

Answers (1)

Pierre GM
Pierre GM

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

Related Questions