I am trying to find specific elements (those with a value less than 5) in a particular data column from an imported csv file. However I keep encountering this strange error. The code reads as follows:
z = np.loadtxt('exoplanets_nasa_archive.csv', delimiter= ',', dtype=str ) zlabels = z[0] #print(zlabels) mass =z[1:, 9] subfive =np.where(mass<5)``` #The output error reads: TypeError Traceback (most recent call last) <ipython-input-202-af2622a146c5> in <module>() ----> 1 subfive =np.where(mass<5) TypeError: '<' not supported between instances of 'numpy.ndarray' and 'int'
Advertisement
Answer
Apparently you are doing:
In [78]: mass = np.array([1.23, 123.3], dtype='U32') In [79]: mass Out[79]: array(['1.23', '123.3'], dtype='<U32') In [80]: mass<5 Traceback (most recent call last): File "<ipython-input-80-39e4c1351b25>", line 1, in <module> mass<5 TypeError: '<' not supported between instances of 'numpy.ndarray' and 'int'
I’m a little surprised that it isn’t complaining about instances of string (or string dtype) and int.
With loadtxt
the default dtype is float, and it raises an error if some strings can’t be parsed as floats. np.genfromtxt
assigns those values nan
instead.