Ключевые способы преобразования типов данных в 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