Выборка колонок датафрейма по типам
Рассмотрим, предпочтительный способ выборки колонок датафрейма по типам. Для начала сгенерируем демонстрационный набор данных:
import pandas as pd import numpy as np df = pd.DataFrame([[1, 1, 1.2, 1., 'fio1', True, 'cat1', pd.Period('2022-01', freq='M'), pd.Timestamp('2022-01-01')], [2, 2, 2.3, 0.2, 'fio2', True, 'cat1', pd.Period('2022-02', freq='M'), pd.Timestamp('2022-02-01')], [3, 3, 1, 5.3, 'fio3', False, 'cat2', pd.Period('2022-03', freq='M'), pd.Timestamp('2022-03-01')]], columns=['id1','id2', 'val1', 'val2', 'fio', 'is_mail', 'cat', 'mon', 'day'])\ .astype({'id1':'int8', 'val2':'float16', 'cat':'category'}) df
В датасете представлены разные типы колонок:
df.dtypes
Рассмотрим, как корректно выбрать колонки заданных типов с помощью метода select_dtypes, который в аргументах include/exclude принимает список типов колонок для отбора/фильтрации и возвращает датафрейм.
Целый тип
Его выборка производится по строке integer (или np.integer):
df.select_dtypes(include='integer').columns # df.select_dtypes(include=np.integer).columns
Другие вариации приведут к отбору не всех колонок:
display(df.select_dtypes(include='int').columns) df.select_dtypes(include=np.int8).columns
Тип с плавающей точкой
df.select_dtypes(include='floating').columns # df.select_dtypes(include=np.floating).columns
df.select_dtypes(include='float').columns
Численный тип
Численные колонки (и float, и int) отбираем по ключевому слову number:
df.select_dtypes(include='number').columns # df.select_dtypes(include=np.number).columns
Логический тип
df.select_dtypes(include='bool').columns
Категориальный тип
Используйте ключевое слово category:
df.select_dtypes(include='category').columns
Строчный тип
Колонки со строками возвращаются при указании object (однако среди них могут быть колонки с встроенными питоновскими типами):
df.select_dtypes(include='object').columns
Дата и время
Для получения используйте строку datetime:
df.select_dtypes(include='datetime').columns
Период
Используйте ссылку на тип - pd.PeriodDtype:
df.select_dtypes(include=pd.PeriodDtype).columns
Так как для получения списка колонок сначала возвращается датафрейм, если он большой, лучше получать типы из его среза. Для разнообразия получим колонки, исключая дробные:
df.head().select_dtypes(exclude='floating')