Привет! Ты загрузил данные в Pandas DataFrame. И что дальше? Как понять, что внутри? Сколько строк и колонок? Какие там типы данных? Есть ли пропуски?
В этой статье мы разберём 4 главных метода для первичного анализа данных:
head()— первые строкиtail()— последние строкиinfo()— структура и типы данныхdescribe()— статистика числовых колонок
- Что нужно знать перед началом
- Основная часть
- head() — первые строки
- tail() — последние строки
- info() — структура и типы данных
- describe() — статистика числовых колонок
- describe() для всех колонок
- Все типы данных:
- Практический пример: анализ данных о продажах
- Дополнительные полезные методы
- shape — размер DataFrame
- columns — список колонок
- dtypes — типы данных
- value_counts() — подсчёт уникальных значений
- isna().sum() — подсчёт пропусков
- Шпаргалка по просмотру данных
- Задачи для закрепления
- Нюансы и подводные камни
- describe() и пропуски
- info() и большие датасеты
- head() и tail() для больших данных
- Частые ошибки и как их избежать
- Ошибка 1: Не вызвал info() после загрузки
- Ошибка 2: Думать, что describe() — это всё
- Ошибка 3: Не указал количество строк в head()
- Шпаргалка
- Заключение
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Pandas (
pip install pandas) - Данные для практики (можно взять встроенный датасет)
- Базовое понимание DataFrame
Совет: Эти методы — твой первый шаг при работе с любыми данными. Они помогают быстро понять, с чем ты имеешь дело.
Основная часть
head() — первые строки
head() показывает первые N строк DataFrame. По умолчанию — 5 строк.
import pandas as pd
# Создаём пример данных
data = {
'Имя': ['Анна', 'Иван', 'Мария', 'Пётр', 'Ольга', 'Сергей', 'Елена', 'Дмитрий'],
'Возраст': [25, 30, 22, 35, 28, 40, 33, 27],
'Город': ['Москва', 'СПб', 'Казань', 'Новосибирск', 'Екатеринбург', 'Москва', 'СПб', 'Казань'],
'Зарплата': [50000, 60000, 45000, 70000, 55000, 80000, 62000, 48000]
}
df = pd.DataFrame(data)
# Первые 5 строк (по умолчанию)
print(df.head())Результат:
Имя Возраст Город Зарплата
0 Анна 25 Москва 50000
1 Иван 30 СПб 60000
2 Мария 22 Казань 45000
3 Пётр 35 Новосибирск 70000
4 Ольга 28 Екатеринбург 55000Указываем количество строк:
# Первые 3 строки
print(df.head(3))
# Первые 10 строк
print(df.head(10))Совет:
head()— первый метод, который ты вызываешь после загрузки данных. Это как «посмотреть в лицо» своим данным.
tail() — последние строки
tail() показывает последние N строк. По умолчанию — 5 строк.
# Последние 5 строк (по умолчанию)
print(df.tail())Результат:
Имя Возраст Город Зарплата
3 Пётр 35 Новосибирск 70000
4 Ольга 28 Екатеринбург 55000
5 Сергей 40 Москва 80000
6 Елена 33 СПб 62000
7 Дмитрий 27 Казань 48000Указываем количество строк:
# Последние 3 строки
print(df.tail(3))Совет:
tail()полезен, чтобы проверить, как выглядят последние записи. Например, при добавлении новых данных.
info() — структура и типы данных
info() показывает:
- Количество строк и колонок
- Типы данных в каждой колонке
- Количество непустых значений
- Используемую память
print(df.info())Результат:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8 entries, 0 to 7
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Имя 8 non-null object
1 Возраст 8 non-null int64
2 Город 8 non-null object
3 Зарплата 8 non-null int64
dtypes: int64(2), object(2)
memory usage: 384.0+ bytesЧто мы видим:
- 8 строк (entries)
- 4 колонки
- Все колонки имеют 8 non-null значений (нет пропусков)
- Типы: int64 (числа) и object (строки)
- Используется 384 байта памяти
Совет:
info()помогает быстро выявить проблемы: пропуски (non-nullменьше, чем entries) или неправильные типы данных.
describe() — статистика числовых колонок
describe() показывает основные статистики для числовых колонок:
count— количество значенийmean— среднееstd— стандартное отклонениеmin— минимум25%— первый квартиль50%— медиана75%— третий квартильmax— максимум
print(df.describe())Результат:
Возраст Зарплата
count 8.000000 8.000000
mean 30.000000 58750.000000
std 5.755159 12076.036998
min 22.000000 45000.000000
25% 26.250000 49750.000000
50% 29.000000 57500.000000
75% 33.250000 66500.000000
max 40.000000 80000.000000Совет:
describe()даёт быстрый взгляд на распределение чисел. Сразу видно, есть ли выбросы (если максимум сильно больше среднего).
describe() для всех колонок
Если в данных есть строки, describe() по умолчанию показывает только числа. Чтобы увидеть статистику по строкам:
# Строковые колонки тоже будут включены
print(df.describe(include='object'))Результат:
Имя Город
count 8 8
unique 8 4
top Анна Москва
freq 1 2Что мы видим для строк:
count— количество значенийunique— количество уникальных значенийtop— самое частое значениеfreq— частота самого частого значения
Совет:
include='object'полезно, чтобы понять, сколько уникальных категорий в строковых колонках.
Все типы данных:
# Статистика по всем колонкам
print(df.describe(include='all'))Практический пример: анализ данных о продажах
import pandas as pd
import numpy as np
# Создаём более реалистичные данные
np.random.seed(42)
data = {
'Товар': ['Ноутбук', 'Телефон', 'Планшет', 'Ноутбук', 'Телефон', 'Планшет',
'Ноутбук', 'Телефон', 'Планшет', 'Ноутбук'],
'Продажи': np.random.randint(1, 20, 10),
'Цена': [50000, 30000, 15000, 52000, 31000, 16000,
49000, 29000, 15500, 51000],
'Город': ['Москва', 'Москва', 'Москва', 'СПб', 'СПб', 'СПб',
'Казань', 'Казань', 'Казань', 'Москва']
}
df = pd.DataFrame(data)
# 1. Смотрим на данные
print("=== Первые 3 строки ===")
print(df.head(3))
print("\n=== Последние 3 строки ===")
print(df.tail(3))
print("\n=== Информация о данных ===")
print(df.info())
print("\n=== Статистика по числам ===")
print(df.describe())
print("\n=== Статистика по строкам ===")
print(df.describe(include='object'))
# Добавляем выручку
df['Выручка'] = df['Продажи'] * df['Цена']
print("\n=== Статистика с новой колонкой ===")
print(df[['Продажи', 'Цена', 'Выручка']].describe())Совет: Комбинируй методы!
head()для просмотра,info()для структуры,describe()для статистики.
Дополнительные полезные методы
shape — размер DataFrame
print(f"Строк: {df.shape[0]}, колонок: {df.shape[1]}")
# Строк: 10, колонок: 5columns — список колонок
print(df.columns)
# Index(['Товар', 'Продажи', 'Цена', 'Город', 'Выручка'], dtype='object')dtypes — типы данных
print(df.dtypes)value_counts() — подсчёт уникальных значений
print(df['Город'].value_counts())Результат:
Москва 4
СПб 3
Казань 3
Name: Город, dtype: int64isna().sum() — подсчёт пропусков
print(df.isna().sum())Результат:
Товар 0
Продажи 0
Цена 0
Город 0
Выручка 0
dtype: int64Совет:
isna().sum()— быстрый способ проверить, есть ли пропуски в данных.
Шпаргалка по просмотру данных
| Метод | Что показывает | Когда использовать |
|---|---|---|
df.head() | Первые N строк | Сразу после загрузки данных |
df.tail() | Последние N строк | Проверить конец данных |
df.info() | Типы данных, пропуски | Понять структуру DataFrame |
df.describe() | Статистика по числам | Оценить распределение чисел |
df.shape | Количество строк и колонок | Быстрый взгляд на размер |
df.columns | Список колонок | Узнать названия колонок |
df.dtypes | Типы каждой колонки | Проверить типы данных |
df.value_counts() | Частота значений | Подсчёт категорий |
df.isna().sum() | Количество пропусков | Выявить пропуски |
Задачи для закрепления
Задача 1. Загрузи любой DataFrame и вызови df.head(10).
Задача 2. С помощью df.info() определи, есть ли в данных пропуски.
Задача 3. С помощью df.describe() найди минимальную и максимальную зарплату в данных.
Задача 4. С помощью df['Город'].value_counts() определи, сколько уникальных городов в данных.
Задача 5. Добавь новую колонку Бонус = Зарплата * 0.1 и снова вызови df.describe().
Ответы:
Задача 1.
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head(10))Задача 2.
print(df.info())
# Если в какой-то колонке меньше значений, чем строк — есть пропускиЗадача 3.
print(df.describe())
# Минимум — строка min, максимум — строка maxЗадача 4.
print(df['Город'].value_counts())
print(f"Уникальных городов: {df['Город'].nunique()}")Задача 5.
df['Бонус'] = df['Зарплата'] * 0.1
print(df.describe())Нюансы и подводные камни
describe() и пропуски
Если в числовой колонке есть пропуски (NaN), они игнорируются в describe().
# Проверь сначала пропуски
print(df.isna().sum())info() и большие датасеты
Для датасетов с миллионами строк info() может быть немного медленным, но всё равно полезным.
head() и tail() для больших данных
Эти методы работают быстро даже на больших датасетах, так как читают только первые/последние строки.
Частые ошибки и как их избежать
Ошибка 1: Не вызвал info() после загрузки
# Плохо — не знаешь, что внутри
df = pd.read_csv('data.csv')
# Сразу начинаешь анализ
# Хорошо — сначала изучи структуру
df = pd.read_csv('data.csv')
print(df.info())
print(df.head())Ошибка 2: Думать, что describe() — это всё
# describe() не показывает пропуски
print(df.describe())
# Всегда проверяй пропуски отдельно
print(df.isna().sum())Ошибка 3: Не указал количество строк в head()
# По умолчанию только 5 строк
print(df.head())
# Укажи больше, если нужно
print(df.head(20))Шпаргалка
| Что нужно | Как пишется |
|---|---|
| Первые 5 строк | df.head() |
| Первые N строк | df.head(N) |
| Последние 5 строк | df.tail() |
| Последние N строк | df.tail(N) |
| Структура DataFrame | df.info() |
| Статистика по числам | df.describe() |
| Статистика по строкам | df.describe(include='object') |
| Все типы данных | df.describe(include='all') |
| Количество строк/колонок | df.shape |
| Список колонок | df.columns |
| Типы данных | df.dtypes |
| Частота значений | df['Колонка'].value_counts() |
| Проверка пропусков | df.isna().sum() |
Заключение
Сегодня мы узнали:
head()— первые строки для быстрого взглядаtail()— последние строки для проверки конца данныхinfo()— структура, типы данных и пропускиdescribe()— статистика для числовых колонок- Дополнительные методы:
shape,columns,value_counts(),isna().sum()
Запомни ритуал при работе с новыми данными:
df.head()— посмотреть на данныеdf.info()— понять структуруdf.describe()— оценить статистикуdf.isna().sum()— проверить пропуски







![Выбор колонок и строк: [] vs loc vs iloc](https://imi-ds.ru/wp-content/uploads/2026/08/vybor-kolonok-i-strok-vs-loc-vs-iloc-335x220.webp)
