← Назад к вопросам
Какие использовал методы 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% задач аналитики. Остальное — это комбинирование этих инструментов.