Error: ‘numpy.ndarray’ object has no attribute index
In numpy, the index() method doesn’t exist and should not be used. If you specify this method to return the index of any element, it will result in an error. There are other methods available in numpy that will return the index of specific elements at a time. First, we will reproduce this error and then will resolve it.
Create a numpy array named Industry with ten strings and try to return the index of “Government.”
# Create numpy array - Industry with 10 strings
Industry = numpy.array(['Agriculture','Banking','Government','Chemical','Electronics',
'Engineering','Entertainment','Environmental','Finance','Manufacturing'])
print(Industry,"\n")
# Try to return the index of Government
Industry.index('Government')
Output
You can see that an AttributeError is encountered.
Solution 1: Using numpy.where()
This function is used to return the indices of the elements in the given array based on specified conditions. In this case, we will use this function and return the index of specific elements by providing some conditions.
Syntax
Let’s examine the syntax of this function. It will return the array of indices (indexing starts from 0).
Example 1
Use the above numpy array and return the index of “Government,” “Engineering,” and “Other” separately using the numpy.where() function.
# Create numpy array - Industry with 10 strings
Industry = numpy.array(['Agriculture','Banking','Government','Chemical','Electronics',
'Engineering','Entertainment','Environmental','Finance','Manufacturing'])
print(Industry,"\n")
# Return the index of Government
print(numpy.where(Industry == 'Government'))
# Return the index of Engineering
print(numpy.where(Industry == 'Engineering'))
# Return the index of Other
print(numpy.where(Industry == 'Other'))
Output
- Index of ‘Government’ is 2
- Index of ‘Engineering’ is 5 and
- Index of ‘Other’ is empty since it doesn’t exist in the array.
Example 2
Create an Industry array with five industries and return the index of “Government.”
# Create numpy array - Industry with 5 strings
Industry = numpy.array(['Agriculture','Banking','Government','Government','Government'])
print(Industry,"\n")
# Return the index of Government
print(numpy.where(Industry == 'Government'))
Output
‘Government’ appears three times in the array, so three indices were returned.
Solution 2: Using numpy.argwhere()
This next approach is using the numpy.argwhere() function, which returns the indices of all elements that are not equal to 0. It returns the array of nested indices in the format – array([[],[],…])
Syntax
Let’s see the syntax of this function.
Example
Create a numpy array named Budgets with five integers and use the above function to return the index of non-zero elements.
# Create numpy array - Budgets with 5 integers
Budgets = numpy.array([0,2000,3000,0,0])
print(Budgets,"\n")
# Return the index of non-zero elements
numpy.argwhere(Budgets)
Output
There are two non-zero elements and their index positions are 1 and 2.
Conclusion
The index() method is not applied on the numpy array as it will return the AttributeError – ‘numpy.ndarray’ object has no attribute index. Instead, use the numpy.where() function by specifying the conditions. Based on the condition, the indices will be returned. If you want the index positions of non-zero elements, use the numpy.argwhere() function.