Disons que df
c'est un DataFrame pandas. Je voudrais trouver toutes les colonnes de type numérique. Quelque chose comme:
isNumeric = is_numeric(df)
Disons que df
c'est un DataFrame pandas. Je voudrais trouver toutes les colonnes de type numérique. Quelque chose comme:
isNumeric = is_numeric(df)
Réponses:
Vous pouvez utiliser la select_dtypes
méthode DataFrame. Il comprend deux paramètres inclure et exclure. Donc isNumeric ressemblerait à:
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
newdf = df.select_dtypes(include=numerics)
list(df.select_dtypes(include=[np.number]).columns.values)
pour obtenir une liste des noms des colonnes numériques
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
0 1 s
1 2 s
2 3 s
3 4 s
In [33]: data._get_numeric_data()
Out[33]:
A
0 1
1 2
2 3
3 4
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 .
Réponse simple en une ligne pour créer un nouveau dataframe avec uniquement des colonnes numériques:
df.select_dtypes(include=np.number)
Si vous voulez les noms des colonnes numériques:
df.select_dtypes(include=np.number).columns.tolist()
Code complet:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': range(7, 10),
'B': np.random.rand(3),
'C': ['foo','bar','baz'],
'D': ['who','what','when']})
df
# A B C D
# 0 7 0.704021 foo who
# 1 8 0.264025 bar what
# 2 9 0.230671 baz when
df_numerics_only = df.select_dtypes(include=np.number)
df_numerics_only
# A B
# 0 7 0.704021
# 1 8 0.264025
# 2 9 0.230671
colnames_numerics_only = df.select_dtypes(include=np.number).columns.tolist()
colnames_numerics_only
# ['A', 'B']
df.select_dtypes(include=['int64']).columns.tolist()
include=
. select_dtypes(np.number)
df.fillna(value=0, inplace=True)
Une seule ligne simple:
df.select_dtypes('number').columns
Les codes suivants renverront la liste des noms des colonnes numériques d'un ensemble de données.
cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)
voici marketing_train
mon 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:
['custAge',
'campaign',
'pdays',
'previous',
'emp.var.rate',
'cons.price.idx',
'cons.conf.idx',
'euribor3m',
'nr.employed',
'pmonths',
'pastEmail']
Merci
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)
En adaptant cette réponse , vous pourriez faire
df.ix[:,df.applymap(np.isreal).all(axis=0)]
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.
Veuillez consulter le code ci-dessous:
if(dataset.select_dtypes(include=[np.number]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.number]).describe())
if(dataset.select_dtypes(include=[np.object]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.object]).describe())
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.
Nous pouvons inclure et exclure des types de données selon l'exigence ci-dessous:
train.select_dtypes(include=None, exclude=None)
train.select_dtypes(include='number') #will include all the numeric types
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 dtype
Voir 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]'
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.