Ключевые способы преобразования типов датафрейма
Соберем все ключевые способы преобразования типов данных датафрейма вместе. Для примера создадим тренировочный датафрейм:
import pandas as pd import numpy as np df = pd.DataFrame([['Петров Иван Иванович', '2022-01',35, 12.3, 'м'], ['Алексеев Павел Александрович', '2022-02',22, 30, 'м'], ['Запашная Галина Ивановна', '2022-01', 51, np.nan, 'ж']], columns = ['fio', 'month', 'age', 'revenue', 'gender']) display(df) display(df.dtypes)
Дата
Используйте функцию to_datetime библиотеки Pandas, в которой задается колонка и по необходимости формат данных в ней:
pd.to_datetime(df['month'], format='%Y-%m')
Числовые форматы
Функция to_numeric позволяет преобразовать численный формат до ближайшего целого или дробного для экономии места (об этом чуть ниже):
pd.to_numeric(df['age'], downcast='integer')
pd.to_numeric(df['revenue'], downcast='float')
Целое с пропусками
Если столбец с целыми числами содержит пропуски по умолчанию у него будет тип дробного. Однако в последних версиях Pandas есть специальный целочисленный формат - Int64, который позволяет иметь пропуски:
(df['revenue']//10).astype('Int64')
Категориальный формат
Если в колонке небольшой набор значений, то для оптимизации ее можно преобразовать в категориальный формат с помощью класса Pandas - Categorical:
pd.Categorical(df['gender'])
Теперь посмотрим, насколько сокращается используемая память благодаря нашим преобразования. Сэмплируем выборку строк с возвращениями из нашего датафрейма:
df = df.sample(n=1000000, replace=True) df.info()
Теперь преобразуем типы и выведем новый размер:
df['month'] = pd.to_datetime(df['month'], format='%Y-%m') df['age'] = pd.to_numeric(df['age'], downcast='integer') df['revenue'] = pd.to_numeric(df['revenue'], downcast='float') df['gender'] = pd.Categorical(df['gender']) df.info()