Way to create numpy array to contain only unique elements for lists within it

Tags: , ,



I have a numpy array A which looks like this:

array([list(['nan', 'nan']),
       list(['nan', 'nan', 'apple', 'apple', 'banana', 'nan', 'nan']),
       list(['red', 'red']), ...,
       list(['nan', 'festival'])], dtype=object)

I want to convert this to an array in which each list contains only unique elements. For example, I want the above array to get converted to:

['nan'],['nan','apple','banana'],['red'],...,['nan','festival']

I have tried doing this:

output = []
for i in A:
    output.append(np.unique(i))
output

The output which I get doing this is not desired and currently looks like this:

[array(['nan'], dtype='<U3'),
 array(['nan'], dtype='<U3'),
 array(['nan'], dtype='<U3'),....]

What can be done?

Answer

arr=np.array([list(['nan', 'nan']),
       list(['nan', 'nan', 'apple', 'apple', 'banana', 'nan', 'nan']),
       list(['red', 'red']), ...,
       list(['nan', 'festival'])], dtype=object)

try via list comprehension:

out=[np.unique(x).tolist() for x in arr]

OR

out=[list(np.unique(x)) for x in arr]

output of out:

[['nan'], ['apple', 'banana', 'nan'], ['red'], [Ellipsis], ['festival', 'nan']]


Source: stackoverflow