Ключевые способы преобразования типов данных в 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.dtypesastype
Популярным способом является использование метода 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_ddf = 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.dtypesto_datetime
Если в ваших данных присутствуют строки, задающие дату, то для их преобразования используйте to_datetime (подробнее здесь):
df['dt'] = pd.to_datetime(df['dt'], format='%Y-%m-%d') display(df) df.dtypes