Disons que df
est un pandas _ DataFrame. Je voudrais trouver toutes les colonnes de type numérique. Quelque chose comme:
isNumeric = is_numeric(df)
Vous pouvez utiliser la méthode select_dtypes
de DataFrame. Il comprend deux paramètres inclus et exclure. Donc, estNumeric ressemblerait à:
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
newdf = df.select_dtypes(include=numerics)
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 d'un détail d'implémentation) et qu'elle peut être modifiée ou supprimée à l'avenir. à utiliser avec prudence.
Réponse simple sur une ligne pour créer une nouvelle image de données 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(exclude=['object'])
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)
S'adapter cette réponse , tu pourrais le faire
df.ix[:,df.applymap(np.isreal).all(axis=0)]
Ici, np.applymap(np.isreal)
indique si chaque cellule du cadre de données est numérique et .axis(all=0)
vérifie si toutes les valeurs d'une colonne sont vraies et renvoie une série de booléens pouvant être utilisés pour indexer les colonnes souhaitées.
C'est un autre code simple pour trouver une colonne numérique dans le cadre de données pandas,
numeric_clmns = df.dtypes[df.dtypes != "object"].index
S'il vous plaît voir 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 les valeurs sont numériques, telles 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.
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)
ici marketing_train est mon ensemble de données et select_dtypes () est une fonction permettant de sélectionner des types de données en utilisant des arguments d'exclusion et d'inclusion, et les colonnes sont utilisées pour extraire le nom de colonne de l'ensemble de données dont le code ci-dessus est extrait: ['custAge', 'campaign', 'pdays', 'previous', 'emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m', 'nr.employed', 'pmonths', 'pastEmail']
Merci