
pandas.DataFrame a le type de données dtype pour chaque colonne.
Pour extraire uniquement les colonnes avec un dtype spécifique, utilisez la méthode select_dtypes() de pandas.DataFrame.
Cet article décrit le contenu suivant.
- Utilisation de base de select_dtypes()
- Spécifiez dtype à extraire :
include - Spécifiez dtype à exclure :
exclude 
 - Spécifiez dtype à extraire :
 
Consultez l’article suivant pour le type de données dtype et la méthode astype().
Utilisez le pandas.DataFrame suivant avec des colonnes de différents types de données comme exemple.
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3],
                   'b': [0.1, 0.2, 0.3],
                   'c': ['X', 'Y', 'Z'],
                   'd': [[0, 0], [1, 1], [2, 2]],
                   'e': [True, True, False]})
df['f'] = pd.to_datetime(['2018-01-01', '2018-02-01', '2018-03-01'])
print(df)
#    a    b  c       d      e          f
# 0  1  0.1  X  [0, 0]   True 2018-01-01
# 1  2  0.2  Y  [1, 1]   True 2018-02-01
# 2  3  0.3  Z  [2, 2]  False 2018-03-01
print(df.dtypes)
# a             int64
# b           float64
# c            object
# d            object
# e              bool
# f    datetime64[ns]
# dtype: object
Utilisation de base de select_dtypes()
Spécifiez le dtype à extraire avec le paramètre include.
print(df.select_dtypes(include=int))
#    a
# 0  1
# 1  2
# 2  3
Les types intégrés Python tels que int et float peuvent être spécifiés tels quels. Vous pouvez également le spécifier sous forme de chaîne, comme ‘int’. Cela peut aussi être comme ‘int64’, incluant strictement le nombre de bits.
print(df.select_dtypes(include='int'))
#    a
# 0  1
# 1  2
# 2  3
print(df.select_dtypes(include='int64'))
#    a
# 0  1
# 1  2
# 2  3
Bien sûr, si le nombre de bits est inclus, il ne sera sélectionné que si le nombre de bits correspond.
print(df.select_dtypes(include='int32'))
# Empty DataFrame
# Columns: []
# Index: [0, 1, 2]
Plusieurs dtype peuvent être spécifiés avec une liste. datetime64[ns] peut être spécifié avec ‘datetime’.
print(df.select_dtypes(include=[float, bool, 'datetime']))
#      b      e          f
# 0  0.1   True 2018-01-01
# 1  0.2   True 2018-02-01
# 2  0.3  False 2018-03-01
Les types numériques tels que int et float peuvent être spécifiés avec ‘number’.
print(df.select_dtypes(include='number'))
#    a    b
# 0  1  0.1
# 1  2  0.2
# 2  3  0.3
Étant donné que le dtype d’une colonne dont les éléments sont str est object, une erreur est générée si str ou ‘str’ est spécifié.
# print(df.select_dtypes(include=str))
# TypeError: string dtypes are not allowed, use 'object' instead
Le dtype d’une colonne dont les éléments sont des types intégrés standard Python tels que list et dict est également objet. Notez que si vous spécifiez un objet, ces colonnes sont également sélectionnées.
print(df.select_dtypes(include=object))
#    c       d
# 0  X  [0, 0]
# 1  Y  [1, 1]
# 2  Z  [2, 2]
print(type(df.at[0, 'c']))
# <class 'str'>
print(type(df.at[0, 'd']))
# <class 'list'>
Vous n’aurez peut-être pas trop à vous en soucier car les objets autres que str ne seront probablement pas des éléments de pandas.DataFrame à moins que vous ne le manipuliez intentionnellement.
Spécifiez dtype à exclure :exclude
Spécifiez le dtype à exclure avec le paramètre exclude.
Plusieurs dtype peuvent être spécifiés avec une liste.
print(df.select_dtypes(exclude='number'))
#    c       d      e          f
# 0  X  [0, 0]   True 2018-01-01
# 1  Y  [1, 1]   True 2018-02-01
# 2  Z  [2, 2]  False 2018-03-01
print(df.select_dtypes(exclude=[bool, 'datetime']))
#    a    b  c       d
# 0  1  0.1  X  [0, 0]
# 1  2  0.2  Y  [1, 1]
# 2  3  0.3  Z  [2, 2]
inclure et exclure peuvent être spécifiés en même temps, mais une erreur est générée si le même type est spécifié pour les deux.
print(df.select_dtypes(include='number', exclude=int))
#      b
# 0  0.1
# 1  0.2
# 2  0.3
# print(df.select_dtypes(include=[int, bool], exclude=int))
# ValueError: include and exclude overlap on frozenset({<class 'numpy.int64'>})
