web-dev-qa-db-fra.com

Comment trouver des colonnes numériques dans les pandas?

Disons que df est un pandas _ DataFrame. Je voudrais trouver toutes les colonnes de type numérique. Quelque chose comme:

isNumeric = is_numeric(df)
90
Hanan Shteingart

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)
108
Anand

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.

58
Kathirmani Sukumar

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']
41
df.select_dtypes(exclude=['object'])
23
WeNYoBen
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)
2
Hanan Shteingart

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.

2
Garrett

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 
2
Anvesh_vs

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.

1
mickey

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

1
Hukmaram