Просмотр данных: head(), tail(), info(), describe()

Просмотр данных: head(), tail(), info(), describe() Pandas

Привет! Ты загрузил данные в Pandas DataFrame. И что дальше? Как понять, что внутри? Сколько строк и колонок? Какие там типы данных? Есть ли пропуски?

В этой статье мы разберём 4 главных метода для первичного анализа данных:

  • head() — первые строки
  • tail() — последние строки
  • info() — структура и типы данных
  • describe() — статистика числовых колонок

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный 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, колонок: 5

columns — список колонок

print(df.columns)
# Index(['Товар', 'Продажи', 'Цена', 'Город', 'Выручка'], dtype='object')

dtypes — типы данных

print(df.dtypes)

value_counts() — подсчёт уникальных значений

print(df['Город'].value_counts())

Результат:

Москва    4
СПб       3
Казань    3
Name: Город, dtype: int64

isna().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)
Структура DataFramedf.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() — статистика для числовых колонок
  • Дополнительные методы: shapecolumnsvalue_counts()isna().sum()

Запомни ритуал при работе с новыми данными:

  1. df.head() — посмотреть на данные
  2. df.info() — понять структуру
  3. df.describe() — оценить статистику
  4. df.isna().sum() — проверить пропуски

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×