The issue here is the nature of your array of strings.
If I make the array like:
In [362]: x=np.array(['one','two','three'])
In [363]: x
Out[363]:
array(['one', 'two', 'three'],
dtype='<U5')
In [364]: type(x[0])
Out[364]: numpy.str_
The elements are special kind of string, implicitly padded to 5 characters (the longest, 'np.char methods work on this kind of array
In [365]: np.char.find(x,'one')
Out[365]: array([ 0, -1, -1])
But if I make a object array that contains strings, it produces your error
In [366]: y=np.array(['one','two','three'],dtype=object)
In [367]: y
Out[367]: array(['one', 'two', 'three'], dtype=object)
In [368]: type(y[0])
Out[368]: str
In [369]: np.char.find(y,'one')
...
/usr/lib/python3/dist-packages/numpy/core/defchararray.py in find(a, sub, start, end)
...
TypeError: string operation on non-string array
And more often than not, an object array has to be treated as a list.
In [370]: y
Out[370]: array(['one', 'two', 'three'], dtype=object)
In [371]: [i.find('one') for i in y]
Out[371]: [0, -1, -1]
In [372]: np.array([i.find('one') for i in y])
Out[372]: array([ 0, -1, -1])
The np.char methods are convenient, but they aren't faster. They still have to iterate through the array applying regular string operations to each element.
[s.find(pattern) for s in A]and then you will have the index of the first occurrence of that pattern in each string (-1 if the pattern is not found)