обработка данных
January 17, 2023

Ключевые способы преобразования типов данных в Pandas

Нельзя разбитую чашку сделать целой. Можно только склеить её и назвать целой, но целой она от этого не станет (Теодор Драйзер).
Рассмотрим, основные способы преобразования типов данных Pandas датафрейма и особенности их использования. Для демонстрационных целей создадим следующую таблицу:

import pandas as pd

df = pd.DataFrame([['id1', '2020-01-02', 1, 3, .2], ['id2', '2020-03-22', 22, 6, .4], 
                   ['id3', '2020-02-04', 14, 7, 9]], 
                  columns=['id', 'dt', 'val1', 'val2', 'val3'])
display(df)

df.dtypes

astype

Популярным способом является использование метода astype.

все колонки

С его помощью можно задать тип сразу для всех колонок, если в качестве аргумента передать только тип:

df[df.columns[2:]] = df[df.columns[2:]].astype('float32')
display(df)

df.dtypes

конкретные колонки

Также можно передать словарь колонка-тип для дифференцированного назначения типов:

t_d = {col:t for (col, t) in zip(df.columns[2:], ['int32', 'int16', 'float64'])}
t_d
df = df.astype(t_d)
display(df)
df.dtypes

to_numeric

Также преобразовать тип можно с помощью метода to_numeric, который в качестве бонуса определит, сколько байт надо выделять (подробнее о границах типов и Pandas to_numeric читайте здесь):

import numpy as np
for col in df.select_dtypes(include=float):
    df[col] = pd.to_numeric(df[col], downcast='float')

for col in df.select_dtypes(include=int):
    df[col] = pd.to_numeric(df[col], downcast='integer')

display(df)
df.dtypes

to_datetime

Если в ваших данных присутствуют строки, задающие дату, то для их преобразования используйте to_datetime (подробнее здесь):

df['dt'] = pd.to_datetime(df['dt'], format='%Y-%m-%d')
display(df)
df.dtypes

Полезные ссылки:

  1. Определение границ числовых типов с Pandas и NumPy
  2. Преобразование других типов данных
  3. Преобразование в формат даты