Encuentre valores únicos en un dataframe de Pandas, independientemente de la ubicación de la fila o columna

Tengo un dataframe de Pandas y quiero encontrar todos los valores únicos en ese dataframe … independientemente de las filas / columnas. Si tengo un dataframe de 10 x 10, y supongo que tienen 84 valores únicos, necesito encontrarlos, no el recuento.

Puedo crear un conjunto y agregar los valores de cada fila iterando sobre las filas del dataframe. Pero, siento que puede ser ineficiente (no puede justificar eso). ¿Hay una manera eficiente de encontrarlo? ¿Hay una función predefinida?

In [1]: df = DataFrame(np.random.randint(0,10,size=100).reshape(10,10)) In [2]: df Out[2]: 0 1 2 3 4 5 6 7 8 9 0 2 2 3 2 6 1 9 9 3 3 1 1 2 5 8 5 2 5 0 6 3 2 0 7 0 7 5 5 9 1 0 3 3 5 3 2 3 7 6 8 3 8 4 4 8 0 2 2 3 9 7 1 2 7 5 3 2 8 5 6 4 3 7 0 8 6 4 2 6 5 3 3 4 5 3 2 7 7 6 0 6 6 7 1 7 5 1 8 7 4 3 1 0 6 9 7 7 3 9 5 3 4 5 2 0 8 6 4 7 In [13]: Series(df.values.ravel()).unique() Out[13]: array([9, 1, 4, 6, 0, 7, 5, 8, 3, 2]) 

Numpy clasifica de forma única, por lo que es más rápido hacerlo de esta manera (y luego ordenar si es necesario)

 In [14]: df = DataFrame(np.random.randint(0,10,size=10000).reshape(100,100)) In [15]: %timeit Series(df.values.ravel()).unique() 10000 loops, best of 3: 137 ᄉs per loop In [16]: %timeit np.unique(df.values.ravel()) 1000 loops, best of 3: 270 ᄉs per loop 

O puedes usar:

df.stack().unique()

Entonces no debe preocuparse si tiene valores de NaN , ya que se excluyen al hacer el astackmiento.