J'ai un Pandas dataframe et je veux trouver toutes les valeurs uniques dans ce dataframe ... indépendamment de la rangée/des colonnes. Si j'ai un dataframe 10 x 10, et supposons qu'ils en ont 84 uniques valeurs, je dois les trouver - Pas le compte.
Je peux créer un ensemble et ajouter les valeurs de chaque ligne en effectuant une itération sur les lignes du cadre de données. Mais, je pense que cela peut être inefficace (ne peut pas justifier cela). Y a-t-il un moyen efficace de le trouver? Y a-t-il une fonction prédéfinie?
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 unique sort, il est donc plus rapide de le faire de cette façon (et ensuite de trier si vous en avez besoin)
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
Ou vous pouvez utiliser:
df.stack().unique()
Ensuite, vous n'avez pas à vous inquiéter si vous avez NaN
valeurs, car elles sont exclues lors de l'empilement.