← Назад к вопросам

Какие использовал методы Pandas?

1.6 Junior🔥 211 комментариев
#Pandas и обработка данных

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы Pandas: практический обзор для Data Analyst

Pandas — это основной инструмент Data Analyst на Python. Большинство работы сводится к манипуляции DataFrame и Series. Вот методы, которые я использую ежедневно.

1. Загрузка и сохранение данных

import pandas as pd
import numpy as np

# Загрузка данных
df = pd.read_csv('data.csv', delimiter=';', encoding='utf-8')
df = pd.read_excel('data.xlsx', sheet_name='Sales')
df = pd.read_sql('SELECT * FROM users', connection)
df = pd.read_json('data.json')

# Сохранение
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', sheet_name='Data')
df.to_sql('table_name', connection, if_exists='replace')
df.to_json('output.json')

2. Исследование данных (Exploratory Data Analysis)

# Основная информация
print(df.shape)  # (1000, 5) — 1000 строк, 5 столбцов
print(df.info())  # типы данных, пропуски
print(df.head())  # первые 5 строк
print(df.tail())  # последние 5 строк
print(df.describe())  # статистика (mean, std, min, max)

# Дополнительная информация
print(df.dtypes)  # типы столбцов
print(df.columns)  # названия столбцов
print(df.size)  # общее количество элементов
print(df.memory_usage())  # использование памяти

3. Выборка и фильтрация данных

# По индексу
print(df.iloc[0])  # первая строка
print(df.iloc[0:5])  # первые 5 строк
print(df.iloc[:, 0])  # первый столбец
print(df.iloc[0:5, 0:3])  # подтаблица (5 строк, 3 столбца)

# По метке (label-based)
print(df.loc['row_label'])  # строка по метке
print(df.loc[:, 'column_name'])  # столбец по имени
print(df.loc[0:2, 'name':'age'])  # подтаблица с метками

# По условию (фильтрация)
df_filtered = df[df['age'] > 30]
df_filtered = df[(df['age'] > 30) & (df['salary'] > 50000)]
df_filtered = df[df['status'].isin(['active', 'pending'])]
df_filtered = df[df['email'].str.contains('@gmail.com')]

4. Выбор столбцов

# Выбрать один столбец
series = df['name']
series = df.name  # альтернативный синтаксис

# Выбрать несколько столбцов
df_subset = df[['name', 'age', 'email']]

# Выбрать по типу
df_numeric = df.select_dtypes(include=['number'])
df_string = df.select_dtypes(include=['object'])

# Выбрать по условию
cols_with_na = df.columns[df.isnull().any()]
df_with_na = df[cols_with_na]

5. Переименование и преобразование столбцов

# Переименование
df = df.rename(columns={'old_name': 'new_name'})
df.columns = ['col1', 'col2', 'col3']

# Преобразование типов
df['age'] = df['age'].astype('int64')
df['date'] = pd.to_datetime(df['date'])
df['price'] = pd.to_numeric(df['price'], errors='coerce')  # ошибочные → NaN

# Категориальные типы (экономия памяти)
df['status'] = df['status'].astype('category')
df['rating'] = pd.Categorical(df['rating'], categories=[1, 2, 3, 4, 5], ordered=True)

6. Обработка пропусков

# Выявление пропусков
print(df.isnull().sum())  # количество пропусков в каждом столбце
print(df.isnull().any())  # есть ли пропуски

# Удаление пропусков
df_clean = df.dropna()  # удалить строки с пропусками
df_clean = df.dropna(subset=['age', 'email'])  # удалить по конкретным столбцам
df_clean = df.dropna(axis=1)  # удалить столбцы с пропусками

# Заполнение пропусков
df['age'] = df['age'].fillna(df['age'].mean())
df['status'] = df['status'].fillna('unknown')
df = df.fillna(method='ffill')  # forward fill (предыдущее значение)
df = df.fillna(method='bfill')  # backward fill (следующее значение)
df = df.interpolate()  # интерполяция

7. Сортировка

# Сортировка по столбцу
df_sorted = df.sort_values('salary', ascending=False)

# Сортировка по нескольким столбцам
df_sorted = df.sort_values(['department', 'salary'], ascending=[True, False])

# Сортировка по индексу
df_sorted = df.sort_index()

# Случайный порядок
df_shuffled = df.sample(frac=1).reset_index(drop=True)

8. Дублирование и уникальные значения

# Выявление дубликатов
duplicates = df[df.duplicated(keep=False)]
print(df.duplicated(subset=['email']).sum())  # количество дубликатов

# Удаление дубликатов
df_unique = df.drop_duplicates()
df_unique = df.drop_duplicates(subset=['email'])

# Уникальные значения
unique_emails = df['email'].unique()
print(df['status'].value_counts())  # частота значений
print(df['status'].value_counts(normalize=True))  # доли

9. Группировка и агрегация (GROUP BY)

# Простая группировка
grouped = df.groupby('department')['salary'].mean()

# Несколько агрегирующих функций
agg_result = df.groupby('department').agg({
    'salary': ['mean', 'max', 'min'],
    'employee_id': 'count'
})

# Пользовательская функция агрегации
agg_result = df.groupby('department')['salary'].agg(
    lambda x: x.nlargest(3).mean()  # средняя из 3 самых высоких
)

# Группировка по нескольким столбцам
grouped = df.groupby(['department', 'status']).size()

# Итоговые статистики
df.groupby('department').agg({
    'age': 'mean',
    'salary': ['sum', 'std'],
    'name': 'count'
})

10. Объединение таблиц (Merge/Join)

# INNER JOIN
df_merged = pd.merge(df_users, df_orders, on='user_id', how='inner')

# LEFT JOIN
df_merged = pd.merge(df_users, df_orders, on='user_id', how='left')

# RIGHT JOIN
df_merged = pd.merge(df_users, df_orders, on='user_id', how='right')

# FULL OUTER JOIN
df_merged = pd.merge(df_users, df_orders, on='user_id', how='outer')

# По разным ключам
df_merged = pd.merge(
    df_users, df_orders,
    left_on='user_id',
    right_on='customer_id',
    how='left'
)

# Конкатенация
df_combined = pd.concat([df1, df2], axis=0)  # по строкам
df_combined = pd.concat([df1, df2], axis=1)  # по столбцам

11. Трансформация данных

Преобразование структуры

# MELT: "расплавить" столбцы в строки
df_melted = df.melt(
    id_vars=['name'],
    value_vars=['Jan', 'Feb', 'Mar'],
    var_name='month',
    value_name='sales'
)

# PIVOT: превратить строки в столбцы
df_pivot = df.pivot_table(
    index='name',
    columns='month',
    values='sales',
    aggfunc='sum',
    fill_value=0
)

# PIVOT без агрегации
df_pivot = df.pivot(index='name', columns='month', values='sales')

Применение функций

# Применить функцию к столбцу
df['salary_doubled'] = df['salary'].apply(lambda x: x * 2)
df['age_group'] = df['age'].apply(
    lambda x: 'young' if x < 30 else 'senior'
)

# Применить к всему DataFrame
df_normalized = df.applymap(lambda x: (x - x.mean()) / x.std())  # для всех числовых

# Строковые методы
df['email'] = df['email'].str.lower()
df['name'] = df['name'].str.upper()
df['domain'] = df['email'].str.split('@').str[1]
df['has_dash'] = df['phone'].str.contains('-')

12. Создание новых столбцов

# Простое присваивание
df['year'] = 2024

# На основе других столбцов
df['full_name'] = df['first_name'] + ' ' + df['last_name']

# Условное
df['salary_category'] = np.where(
    df['salary'] > 100000,
    'High',
    np.where(df['salary'] > 50000, 'Medium', 'Low')
)

# Использование assign (функциональный подход)
df_new = df.assign(
    salary_doubled=df['salary'] * 2,
    year=2024
)

13. Работа с датами

df['date'] = pd.to_datetime(df['date'])

# Извлечение компонентов
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
df['quarter'] = df['date'].dt.quarter
df['day_of_week'] = df['date'].dt.day_name()

# Операции с датами
df['days_since'] = (pd.Timestamp.now() - df['date']).dt.days
df['date_plus_30'] = df['date'] + pd.Timedelta(days=30)

# Фильтрация по датам
df_recent = df[df['date'] >= '2024-01-01']
df_range = df[(df['date'] >= '2024-01-01') & (df['date'] <= '2024-12-31')]

14. Статистика

# Базовая статистика
print(df['salary'].mean())  # средное
print(df['salary'].median())  # медиана
print(df['salary'].std())  # стандартное отклонение
print(df['salary'].var())  # дисперсия
print(df['salary'].min(), df['salary'].max())
print(df['salary'].quantile([0.25, 0.5, 0.75]))  # квартили

# Корреляция
df.corr()  # матрица корреляции
df['age'].corr(df['salary'])

# Ковариация
df.cov()

# Описательная статистика
df.describe()  # автоматическая статистика

15. Производительность и оптимизация

# Использование памяти
print(df.memory_usage(deep=True))

# Оптимизация типов
df['id'] = df['id'].astype('int32')  # вместо int64
df['status'] = df['status'].astype('category')

# Chunking для больших файлов
chunks = pd.read_csv('large_file.csv', chunksize=10000)
for chunk in chunks:
    process_chunk(chunk)

# Векторизация вместо циклов
df['bonus'] = df['salary'] * 0.1  # вместо for loop

16. Полезные методы для аналитики

# Ранжирование
df['rank'] = df['salary'].rank(method='dense')
df['percentile'] = df['salary'].rank(pct=True) * 100

# Нарастающие суммы
df['cumsum'] = df['sales'].cumsum()
df['cumprod'] = df['growth_rate'].cumprod()

# Сдвиг значений
df['prev_value'] = df['sales'].shift(1)
df['next_value'] = df['sales'].shift(-1)
df['diff'] = df['sales'].diff()

# Вращающееся окно
df['rolling_7day_mean'] = df['sales'].rolling(window=7).mean()
df['rolling_max'] = df['sales'].rolling(window=30).max()

Чеклист Pandas методов

  • ✓ read_csv, read_excel, to_csv, to_excel
  • ✓ head, tail, info, describe, shape
  • ✓ loc, iloc, [], фильтрация
  • ✓ rename, astype, select_dtypes
  • ✓ dropna, fillna, interpolate
  • ✓ sort_values, drop_duplicates, unique
  • ✓ groupby, agg, apply
  • ✓ merge, concat, pivot, melt
  • ✓ str методы для текста
  • ✓ dt методы для дат
  • ✓ mean, std, corr и другая статистика

Пандас — это язык Data Analyst. Эти методы покрывают 90% задач аналитики. Остальное — это комбинирование этих инструментов.