Vous devez spécifier si une colonne contenant un dtypeêtre object, mais tous les éléments étant numériques, compte comme numérique ou non. Si non, prenez la réponse de Hanan, car elle est également plus rapide. Sinon, prenez le mien.
FooBar
Que se passe-t-il si vous essayez simplement df.describe (). Columns. Attribuez-le ensuite à une variable.
coldy
Réponses:
146
Vous pouvez utiliser la select_dtypesméthode DataFrame. Il comprend deux paramètres inclure et exclure. Donc isNumeric ressemblerait à:
Vous pouvez utiliser df.select_dtypes (include = [np.number]) si vous n'avez pas besoin de spécifier une liste «numérique»
KieranPC
23
En vous basant sur l'astuce du commentaire précédent (+1), vous pouvez simplement utiliser list(df.select_dtypes(include=[np.number]).columns.values) pour obtenir une liste des noms des colonnes numériques
user799188
76
Vous pouvez utiliser la fonction non documentée _get_numeric_data()pour filtrer uniquement les colonnes numériques:
df._get_numeric_data()
Exemple:
In[32]: data
Out[32]:
A B
01 s
12 s
23 s
34 s
In[33]: data._get_numeric_data()Out[33]:
A
01122334
Notez qu'il s'agit d'une "méthode privée" (c'est-à-dire, un détail d'implémentation) et est susceptible d'être modifiée ou supprimée à l'avenir. Utilisez avec prudence .
Non, cela n'est documenté nulle part. L'implémentation est ici , cependant, comme @ijoseph l'a mentionné, je me méfierais d'utiliser des méthodes qui commencent par des traits de soulignement car elles ne sont guère plus que des détails d'implémentation. Utilisez littéralement TOUTE autre réponse en plus de cela.
cs95
Exactement. En tant que meilleure pratique, j'essaie d'utiliser et de convertir autant de méthodes numpy que possible. Cela est dû au dynamisme des pandas. L'API change fréquemment. Pour les méthodes non documentées, c'est tout simplement imprudent, aussi utile soit-il.
mik
69
Réponse simple en une ligne pour créer un nouveau dataframe avec uniquement des colonnes numériques:
Si vous ne voulez qu'un seul type, vous n'avez pas besoin de le stocker dans une liste. Vous n'avez pas non plus besoin de préciser include=. select_dtypes(np.number)
BallpointBen
Si vos colonnes ont des données numériques mais ont également None, le dtype peut être "object". Cela contraindra les colonnes au numérique:df.fillna(value=0, inplace=True)
voici marketing_trainmon ensemble de données et sa select_dtypes()fonction pour sélectionner les types de données à l'aide des arguments d'exclusion et d'inclusion et les colonnes sont utilisées pour récupérer le nom de la colonne de la sortie de l'ensemble de données du code ci-dessus sera le suivant:
def is_type(df, baseType):import numpy as np
import pandas as pd
test =[issubclass(np.dtype(d).type, baseType)for d in df.dtypes]return pd.DataFrame(data = test, index = df.columns, columns =["test"])def is_float(df):import numpy as np
return is_type(df, np.float)def is_number(df):import numpy as np
return is_type(df, np.number)def is_integer(df):import numpy as np
return is_type(df, np.integer)
Ici, np.applymap(np.isreal)montre si chaque cellule de la trame de données est numérique et .axis(all=0)vérifie si toutes les valeurs d'une colonne sont True et renvoie une série de valeurs booléennes pouvant être utilisées pour indexer les colonnes souhaitées.
De cette façon, vous pouvez vérifier si la valeur est numérique telle que float et int ou les valeurs srting. la seconde instruction if est utilisée pour vérifier les valeurs de chaîne référencées par l'objet.
dtype
êtreobject
, mais tous les éléments étant numériques, compte comme numérique ou non. Si non, prenez la réponse de Hanan, car elle est également plus rapide. Sinon, prenez le mien.Réponses:
Vous pouvez utiliser la
select_dtypes
méthode DataFrame. Il comprend deux paramètres inclure et exclure. Donc isNumeric ressemblerait à:la source
list(df.select_dtypes(include=[np.number]).columns.values)
pour obtenir une liste des noms des colonnes numériquesVous pouvez utiliser la fonction non documentée
_get_numeric_data()
pour filtrer uniquement les colonnes numériques:Exemple:
Notez qu'il s'agit d'une "méthode privée" (c'est-à-dire, un détail d'implémentation) et est susceptible d'être modifiée ou supprimée à l'avenir. Utilisez avec prudence .
la source
Réponse simple en une ligne pour créer un nouveau dataframe avec uniquement des colonnes numériques:
Si vous voulez les noms des colonnes numériques:
Code complet:
la source
df.select_dtypes(include=['int64']).columns.tolist()
include=
.select_dtypes(np.number)
df.fillna(value=0, inplace=True)
la source
datetime
ne sont pas des types numériquesUne seule ligne simple:
la source
Les codes suivants renverront la liste des noms des colonnes numériques d'un ensemble de données.
voici
marketing_train
mon ensemble de données et saselect_dtypes()
fonction pour sélectionner les types de données à l'aide des arguments d'exclusion et d'inclusion et les colonnes sont utilisées pour récupérer le nom de la colonne de la sortie de l'ensemble de données du code ci-dessus sera le suivant:Merci
la source
Ceci est un autre code simple pour trouver une colonne numérique dans la trame de données pandas,
la source
la source
En adaptant cette réponse , vous pourriez faire
Ici,
np.applymap(np.isreal)
montre si chaque cellule de la trame de données est numérique et.axis(all=0)
vérifie si toutes les valeurs d'une colonne sont True et renvoie une série de valeurs booléennes pouvant être utilisées pour indexer les colonnes souhaitées.la source
Veuillez consulter le code ci-dessous:
De cette façon, vous pouvez vérifier si la valeur est numérique telle que float et int ou les valeurs srting. la seconde instruction if est utilisée pour vérifier les valeurs de chaîne référencées par l'objet.
la source
Nous pouvons inclure et exclure des types de données selon l'exigence ci-dessous:
Fait référence à Jupyter Notebook.
Pour sélectionner tous les types numériques , utilisez
np.number
ou'number'
Pour sélectionner des chaînes, vous devez utiliser le
object
dtype mais notez que cela renverra toutes les colonnes d'objet dtypeVoir le
NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>
__Pour sélectionner datetimes, l' utilisation
np.datetime64
,'datetime'
ou'datetime64'
Pour sélectionner timedeltas, l' utilisation
np.timedelta64
,'timedelta'
ou'timedelta64'
Pour sélectionner des dtypes catégoriques Pandas, utilisez
'category'
Pour sélectionner les types de données Pandas datetimetz, utilisez
'datetimetz'
(nouveau dans 0.20.0) ou `` 'datetime64 [ns, tz]'la source