Проверка типов данных столбцов
Изучите атрибут dtypes, различайте int64, float64 и object и находите столбцы, требующие преобразования.
«Проверка типов данных столбцов» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Почему важны типы данных столбцов
Каждый столбец DataFrame Pandas имеет dtype (тип данных), который определяет способ хранения значений в памяти и допустимые операции над ними. Столбец с целыми числами и dtype object (строковым типом) нельзя суммировать как числовой. Дата, сохранённая как строка, воспринимается как текст, а не как временной ряд. Неправильные dtype — одна из самых частых причин незаметных ошибок и неожиданных результатов в конвейерах анализа данных.
Всегда проверяйте dtype сразу после загрузки нового набора данных.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'age': ['25', '30', '35'], # looks like int, stored as object
'salary': [50000, 60000, 70000], # int64
'hired': ['2022-01-01', '2023-06-15', '2024-03-10'] # looks like date
})
print(df.dtypes)
# age object
# salary int64
# hired object
# dtype: objectАтрибут dtypes
DataFrame.dtypes возвращает Series, индексом которого являются имена столбцов, а значениями — dtype каждого столбца в Pandas. Часто встречаются dtype int64, float64, object (строки и смешанные данные), bool, datetime64[ns] и category. Название dtype сообщает и вид данных, и объём памяти в байтах, необходимый для хранения каждого значения.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'int_col': [1, 2, 3],
'float_col': [1.5, 2.5, 3.5],
'str_col': ['a', 'b', 'c'],
'bool_col': [True, False, True]
})
print(df.dtypes)
# int_col int64
# float_col float64
# str_col object
# bool_col bool
# dtype: objectОпределение типа object
Тип object — универсальный тип Pandas для столбцов, которые нельзя хранить как числовые или логические данные. Обычно он означает строковые данные, но может также указывать на столбец со смешанными типами (например, на числа и строки одновременно). Столбцы object занимают больше памяти, чем специализированные типы, и операции над ними выполняются медленнее. Увидев object, спросите себя: должен ли это быть текст, число, категория или дата?
import pandas as pd
df = pd.DataFrame({'mixed': [1, 'two', 3.0, None]})
print(df.dtypes)
# mixed object
# Check actual Python types inside the column
print(df['mixed'].apply(type).value_counts())
# <class 'int'> 1
# <class 'str'> 1
# <class 'float'> 2 (includes NaN which is float)info() для полного обзора типов
df.info() выводит компактную таблицу с именем каждого столбца, количеством непустых значений и dtype, а также с общим объёмом используемой памяти. Эта одна команда даёт полную картину качества набора данных: одновременно показывает, в каких столбцах есть пропуски и какие имеют неправильные dtype. Поэтому это стандартная первая команда после загрузки набора данных.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'id': [1, 2, 3],
'score': [88.5, 92.0, np.nan],
'grade': ['A', 'A', 'B']
})
df.info()
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 3 entries, 0 to 2
# Data columns (total 3 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 id 3 non-null int64
# 1 score 2 non-null float64
# 2 grade 3 non-null object
# dtypes: float64(1), int64(1), object(1)
# memory usage: 200.0+ bytesРаспространённые проблемы с dtype после read_csv
При чтении CSV-файла Pandas определяет dtype, анализируя значения. Возникают несколько распространённых проблем: числовые столбцы считываются как object, если содержат разделители тысяч в виде запятых или символы валют; логические столбцы считываются как object, если хранятся как строки «Yes»/«No»; а столбцы с датами считываются как object, поскольку Pandas не разбирает даты без соответствующего указания. Знание этих закономерностей позволяет быстро исправлять их преобразованием типов.
import pandas as pd
import io
csv = '''price,date,is_active
'1,200',2024-01-15,Yes
'800',2024-02-20,No
'''
df = pd.read_csv(io.StringIO(csv))
print(df.dtypes)
# price object <- should be int
# date object <- should be datetime64
# is_active object <- should be boolИспользование памяти разными dtype
Разные dtype требуют совершенно разного объёма памяти. Столбец int64 использует 8 байт на значение, тогда как столбец object с короткими строками может использовать 50–200 байт на значение. Для DataFrames с миллионами строк правильный выбор dtype способен уменьшить объём памяти с гигабайт до мегабайт. Вызовите df.memory_usage(deep=True), чтобы увидеть стоимость хранения каждого столбца в байтах.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'int64_col': np.arange(1_000_000, dtype='int64'),
'float32_col': np.arange(1_000_000, dtype='float32'),
'obj_col': ['a'] * 1_000_000
})
mem = df.memory_usage(deep=True) / 1024**2 # MB
print(mem.round(2))
# Index 0.00
# int64_col 7.63
# float32_col 3.81
# obj_col 55.26 <- much more for object!Обнаружение числовых столбцов с неправильным типом
Распространённая проблема — числовой столбец, сохранённый как object из-за случайных символов форматирования. Обнаружить её можно, проверив, отличается ли результат pd.to_numeric(df['col'], errors='coerce') от исходного столбца. Значения, которые нельзя разобрать, превращаются в NaN, поэтому Вы сразу видите, какие строки привели к ошибке определения типа.
import pandas as pd
df = pd.DataFrame({'revenue': ['1000', '2000', '$3000', '4,000']})
# Check which values can't be parsed as numbers
parsed = pd.to_numeric(df['revenue'], errors='coerce')
print(parsed)
# 0 1000.0
# 1 2000.0
# 2 NaN <- '$3000' failed
# 3 NaN <- '4,000' failedПроверка неоднозначности между целым и вещественным типом
Когда в столбце есть значения NaN, Pandas хранит целочисленные столбцы как float64, потому что стандартные целочисленные типы NumPy не могут представлять NaN. В результате значения с плавающей точкой, такие как 25.0, выглядят как целые числа, но хранятся как числа с плавающей точкой. В Pandas появились целочисленные типы с поддержкой пропущенных значений (Int64 с заглавной I), которые поддерживают NaN, сохраняя семантику целых чисел.
import pandas as pd
import numpy as np
df = pd.DataFrame({'count': [1, 2, np.nan, 4]})
print(df['count'].dtype) # float64 — because NaN is float
# Nullable integer type supports NaN
df['count'] = df['count'].astype('Int64') # capital I!
print(df)
# count
# 0 1
# 1 2
# 2 <NA>
# 3 4
print(df['count'].dtype) # Int64select_dtypes() для фильтрации по типу
df.select_dtypes(include=) позволяет выбрать все столбцы, принадлежащие к определённому семейству типов. Распространённые аргументы: 'number' (все числовые), 'object' (строки), 'bool', 'datetime', 'category'. Это особенно полезно в начале конвейера: так можно применять очистку числовых данных только к числовым столбцам, а очистку строк — только к текстовым.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob'],
'age': [25, 30],
'salary': [50000.0, 70000.0],
'dept': ['Eng', 'HR']
})
numeric = df.select_dtypes(include='number')
print('Numeric columns:', numeric.columns.tolist())
# ['age', 'salary']
text = df.select_dtypes(include='object')
print('Text columns:', text.columns.tolist())
# ['name', 'dept']Создание отчёта о типах данных
Практика EDA — составлять отчёт о типах данных, в котором для каждого столбца указаны его тип данных, количество уникальных значений и примеры значений. Это помогает быстро определить, какие столбцы нужно преобразовать до начала анализа. Такой отчёт можно создать с помощью простого DataFrame, построенного на основе агрегирования по столбцам.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'age': [25, 30, 35],
'salary': [50000, 60000, 70000],
'dept': ['Eng', 'HR', 'Eng'],
'hired': ['2022-01-01', '2023-06-15', '2024-03-10']
})
report = pd.DataFrame({
'dtype': df.dtypes,
'unique_count': df.nunique(),
'sample': df.iloc[0]
})
print(report)Согласованность типов данных в рабочих конвейерах
В рабочих конвейерах, которые каждый день обрабатывают новые данные, типы данных могут изменяться: столбец, всегда имевший тип int64, может прийти как float64, если в нём появится хотя бы одно значение NaN. Добавьте проверки типов данных в начало конвейера, чтобы своевременно обнаруживать изменения схемы. Явная остановка с понятной ошибкой гораздо лучше, чем незаметное получение неправильных результатов на следующих этапах.
import pandas as pd
df = pd.DataFrame({'user_id': [1, 2, 3], 'score': [88.0, 92.0, 76.0]})
expected_dtypes = {'user_id': 'int64', 'score': 'float64'}
for col, expected in expected_dtypes.items():
actual = str(df[col].dtype)
assert actual == expected, (
f'Column {col}: expected {expected}, got {actual}'
)
print('All dtypes are correct')Быстрая проверка
Проверьте, насколько хорошо Вы умеете изучать типы данных столбцов.
Итоги урока
В этом уроке Вы узнали: df.dtypes показывает тип каждого столбца, тип object служит универсальным типом для строк и смешанных данных, а df.info() предоставляет полный обзор типов и возможности содержать пропущенные значения. Используйте select_dtypes(), чтобы фильтровать столбцы по семейству типов, и добавляйте проверки типов данных, чтобы обнаруживать изменения схемы в рабочих системах. Далее мы преобразуем столбцы к правильным типам данных с помощью astype().
Часто задаваемые вопросы
Урок «Проверка типов данных столбцов» бесплатный?
Да — полный текст урока «Проверка типов данных столбцов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Чему я научусь в уроке «Проверка типов данных столбцов»?
Изучите атрибут dtypes, различайте int64, float64 и object и находите столбцы, требующие преобразования. Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?
Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Проверка типов данных столбцов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?
Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проверка типов данных столбцов
- Приведение типов с помощью astype()
- Категориальный тип данных
- Корректный разбор дат