11

I want to replace number 3 instead of all 'nan' in array. this is my code:

train= train.replace("nan",int(3))

But nothing changes in my array. Could u please guide me?

Talia
  • 2,585
  • 4
  • 16
  • 28
  • 3
    Aside: what does `print(type(train))` return? Neither lists nor numpy ndarrays have a `replace` method, so I'm not sure why you're not getting an AttributeError. Is `train` a pandas Series? – DSM Nov 03 '15 at 03:09
  • 1
    To follow up on @DSM's comment, if `train` were a pandas dataframe or Series, there's a `fillna()` method that handles this sort of situation. – Boa Nov 03 '15 at 04:31

3 Answers3

32

You can use np.isnan:

import numpy as np
train = np.array([2, 4, 4, 8, 32, np.NaN, 12, np.NaN]) 
train[np.isnan(train)]=3
train

Output:

array([  2.,   4.,   4.,   8.,  32.,   3.,  12.,   3.])
Joe T. Boka
  • 6,340
  • 6
  • 26
  • 47
8
>>> import math
>>> train = [10, float('NaN'), 20, float('NaN'), 30]
>>> train = [3 if math.isnan(x) else x for x in train]
>>> train
[10, 3, 20, 3, 30]
Raymond Hettinger
  • 199,887
  • 59
  • 344
  • 454
0

This code changes all nan to 3:

y = np.nan_to_num(x) + np.isnan(x)*3

This code changes all 3 to nan:

y = x*(x!=3) + 0/(x!=3)

These methods only work with numpy arrays. Please note that np.nan_to_num(x) always changes nan to 0.