← Назад к вопросам
Расскажите о библиотеке Pandas в Python. Какие основные структуры данных она предоставляет?
1.6 Junior🔥 191 комментариев
#Python и инструменты
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Pandas: главная библиотека для анализа данных в Python
Pandas — это библиотека с открытым исходным кодом для обработки и анализа данных на Python. Она предоставляет мощные структуры данных и инструменты для работы с табличными данными, временными рядами и матричными операциями.
Основные структуры данных
1. Series Одномерный массив с метками (индексами). Как столбец в таблице.
import pandas as pd
# Создание Series
ages = pd.Series([25, 30, 35, 40], index=['Alice', 'Bob', 'Charlie', 'David'])
print(ages)
# Вывод:
# Alice 25
# Bob 30
# Charlie 35
# David 40
# Доступ к элементам
print(ages['Alice']) # 25
print(ages[0]) # 25 (по позиции)
print(ages[ages > 30]) # фильтрация
Ключевые операции:
- Индексация и срезы
- Фильтрация по условиям
- Арифметические операции
- Применение функций (map, apply)
2. DataFrame Двумерная таблица с метками для строк и столбцов. Как Excel таблица.
# Создание DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'Salary': [50000, 60000, 75000]
}
df = pd.DataFrame(data)
# Вывод первых 2 строк
print(df.head(2))
# Доступ к столбцам
print(df['Name']) # целый столбец
print(df[['Name', 'Age']]) # несколько столбцов
# Доступ к строкам
print(df.loc[0]) # по метке индекса
print(df.iloc[0]) # по позиции
# Фильтрация
print(df[df['Age'] > 25])
print(df[(df['Age'] > 25) & (df['Salary'] > 55000)])
3. Index Метки для строк и столбцов. Обеспечивает быстрый доступ к данным.
# Установка индекса
df.set_index('Name', inplace=True)
print(df.loc['Alice']) # быстрый доступ по имени
# Multiindex (иерархический индекс)
arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
index = pd.MultiIndex.from_arrays(arrays)
df_multi = pd.DataFrame({'value': [10, 20, 30, 40]}, index=index)
Основные операции
Чтение и запись данных
# Чтение из CSV
df = pd.read_csv('data.csv')
# Чтение из SQL
import sqlalchemy
conn = sqlalchemy.create_engine('postgresql://user:pass@localhost/db')
df = pd.read_sql('SELECT * FROM users', conn)
# Запись в CSV
df.to_csv('output.csv', index=False)
# Запись в SQL
df.to_sql('users', conn, if_exists='append')
Очистка и трансформация данных
# Пропущенные значения
print(df.isnull()) # проверка
print(df.dropna()) # удаление
print(df.fillna(0)) # заполнение
# Дублирующиеся строки
print(df.duplicated()) # проверка
df.drop_duplicates(inplace=True) # удаление
# Переименование столбцов
df.rename(columns={'Age': 'years_old'}, inplace=True)
# Изменение типов данных
df['Age'] = df['Age'].astype(int)
df['Date'] = pd.to_datetime(df['Date'])
Агрегация и группировка
# Базовые статистики
print(df.describe()) # сводка по числовым столбцам
print(df['Salary'].mean()) # среднее значение
print(df['Salary'].std()) # стандартное отклонение
print(df.corr()) # корреляция между столбцами
# GroupBy (как SQL GROUP BY)
grouped = df.groupby('Department')['Salary'].agg(['mean', 'sum', 'count'])
print(grouped)
# Множественная агрегация
agg_dict = {
'Salary': ['mean', 'sum'],
'Age': ['min', 'max']
}
result = df.groupby('Department').agg(agg_dict)
# Pivot таблицы
pivot = df.pivot_table(
values='Salary',
index='Department',
columns='Gender',
aggfunc='mean'
)
Объединение данных
# Merge (как SQL JOIN)
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'val1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'val2': [10, 20, 30]})
result = pd.merge(df1, df2, on='key', how='inner') # inner join
result = pd.merge(df1, df2, on='key', how='left') # left join
# Concat (объединение по строкам)
df3 = pd.concat([df1, df2], ignore_index=True)
# Append (добавление строк)
df1.append(df2, ignore_index=True)
Практический пример: анализ продаж
import pandas as pd
# Загрузка данных
sales = pd.read_csv('sales.csv')
# Проверка качества
print(sales.head())
print(sales.info())
print(sales.isnull().sum())
# Очистка
sales = sales.dropna()
sales['date'] = pd.to_datetime(sales['date'])
# Анализ по периодам
sales['month'] = sales['date'].dt.to_period('M')
monthly_sales = sales.groupby('month').agg({
'amount': 'sum',
'customer_id': 'count'
}).rename(columns={'customer_id': 'transactions'})
# Анализ по категориям
category_analysis = sales.groupby('category').agg({
'amount': ['sum', 'mean', 'std'],
'customer_id': 'count'
})
# RFM анализ (как я говорил ранее)
rfm = sales.groupby('customer_id').agg({
'date': lambda x: (sales['date'].max() - x.max()).days,
'order_id': 'count',
'amount': 'sum'
})
rfm.columns = ['Recency', 'Frequency', 'Monetary']
print(rfm.describe())
Производительность и оптимизация
# Для больших данных используй chunking
chunks = pd.read_csv('huge_file.csv', chunksize=10000)
for chunk in chunks:
process_chunk(chunk)
# Типы данных экономят память
df['category'] = df['category'].astype('category')
df['id'] = df['id'].astype('uint32') # вместо int64
# Использование query для фильтрации
df.query('Age > 25 and Salary > 50000') # быстрее чем []
Почему Pandas незаменим для Product Analysts
- Быстрая работа с данными — загрузить CSV, обработать, выгрузить в Excel за минуты
- Интеграция — работает с SQL, JSON, Excel, API
- Статистика — встроены describe(), corr(), rolling(), expanding()
- Временные ряды — удобная работа с датами и периодами
- Визуализация — интеграция с Matplotlib и Plotly
- Масштабируемость — от 1Mb до 100Gb (с оптимизацией)
Практический совет: Для анализа начни с df.head(), df.info(), df.describe(). Это даст 80 процентов информации о данных.