обработка данных
February 3, 2023

Выборка колонок датафрейма по типам

Рассмотрим, предпочтительный способ выборки колонок датафрейма по типам. Для начала сгенерируем демонстрационный набор данных:

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

Тип с плавающей точкой

Задавайте строку floating:

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

Логический тип

Задаем ключевое слово bool:

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')