human
Y a-t-il un meilleur moyen de déterminer si une variable dans ```Pandas``` et/ou ```NumPy``` est ```numérique``` ou non ? J'ai un ```dictionnaire``` défini par moi-même avec les ```dtypes``` comme clés et ```numeric``` / ```not``` comme valeurs
gpt
Vous pouvez utiliser ```np.issubdtype``` pour vérifier si le dtype est un sous-dtype de ```np.number```. Exemples :
```np.issubdtype(arr.dtype, np.number)  # où arr est un tableau numpy
np.issubdtype(df['X'].dtype, np.number)  # où df['X'] est une série pandas
```
Cela fonctionne pour les dtypes de numpy mais échoue pour les types spécifiques à pandas comme pd.Categorical comme l'a noté Thomas. Si vous utilisez des catégoriques, la fonction ```is_numeric_dtype``` de pandas est une meilleure alternative que np.issubdtype.
```df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.0, 2.0, 3.0],
                   'C': [1j, 2j, 3j], 'D': ['a', 'b', 'c']})
df
Out:
   A    B   C  D
0  1  1.0  1j  a
1  2  2.0  2j  b
2  3  3.0  3j  c
df.dtypes
Out:
A         int64
B       float64
C    complex128
D        object
dtype: object
```

```np.issubdtype(df['A'].dtype, np.number)
Out: True
np.issubdtype(df['B'].dtype, np.number)
Out: True
np.issubdtype(df['C'].dtype, np.number)
Out: True
np.issubdtype(df['D'].dtype, np.number)
Out: False
```
Pour plusieurs colonnes, vous pouvez utiliser np.vectorize :
```is_number = np.vectorize(lambda x: np.issubdtype(x, np.number))
is_number(df.dtypes)
Out: array([ True,  True,  True, False], dtype=bool)
```
Et pour la sélection, pandas dispose maintenant de ```select_dtypes``` :
```df.select_dtypes(include=[np.number])
Out:
   A    B   C
0  1  1.0  1j
1  2  2.0  2j
2  3  3.0  3j
```