В чём отличие между Series и DataFrame в Pandas?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Series vs DataFrame в Pandas
Series и DataFrame — это основные структуры данных в Pandas. Series — это одномерный массив, а DataFrame — это двумерная таблица. Понимание их различий критично для работы с данными в Python.
Что такое Series?
Series — это одномерный индексированный массив данных. Можешь думать о нём как о одном столбце в Excel или одном векторе.
import pandas as pd
# Создание Series
salaries = pd.Series([50000, 60000, 55000, 70000],
index=['Alice', 'Bob', 'Charlie', 'David'])
print(salaries)
# Alice 50000
# Bob 60000
# Charlie 55000
# David 70000
# dtype: int64
print(type(salaries)) # <class 'pandas.core.series.Series'>
Характеристики Series:
- Одномерная (один столбец)
- Имеет индекс (index) и значения (values)
- Каждый элемент имеет метку (label)
- Может содержать разные типы данных (int, str, float, object)
Что такое DataFrame?
DataFrame — это двумерная таблица данных, как электронная таблица Excel или SQL таблица. Это набор Series с одинаковым индексом.
# Создание DataFrame
employees = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'salary': [50000, 60000, 55000, 70000],
'department': ['Sales', 'IT', 'HR', 'Sales']
})
print(employees)
# name salary department
# 0 Alice 50000 Sales
# 1 Bob 60000 IT
# 2 Charlie 55000 HR
# 3 David 70000 Sales
print(type(employees)) # <class 'pandas.core.frame.DataFrame'>
Характеристики DataFrame:
- Двумерная (строки и столбцы)
- Имеет индекс (row index), колонки (columns) и значения
- Каждая колонка — это Series
- Похож на SQL таблицу или Excel лист
Таблица сравнения
| Параметр | Series | DataFrame |
|---|---|---|
| Размерность | 1D (одномерная) | 2D (двумерная) |
| Индекс | Row index | Row index + Column names |
| Аналогия | Один столбец в Excel | Весь лист Excel |
| Аналогия (БД) | Один атрибут | Вся таблица |
| Тип данных | Один для всех элементов | Разные в каждой колонке |
| Селекция | s[0] или s['label'] | df['col'] или df.loc[row] |
| Форма | (n,) | (n, m) |
Взаимоотношение
DataFrame состоит из Series!
# Каждая колонка DataFrame — это Series
print(type(employees['salary'])) # <class 'pandas.core.series.Series'>
print(employees['salary']) # Series с 4 значениями
# Каждая строка DataFrame — это Series
print(type(employees.iloc[0])) # <class 'pandas.core.series.Series'>
print(employees.iloc[0]) # Series с 3 значениями (name, salary, department)
Создание и базовые операции
Series из списка:
# Простой способ
scores = pd.Series([85, 90, 78, 92])
# С кастомным индексом
scores = pd.Series([85, 90, 78, 92],
index=['Math', 'English', 'Science', 'History'])
# С именем
scores.name = 'Test Scores'
print(scores.name) # 'Test Scores'
DataFrame из словаря:
# Из словаря, где ключи — колонки
data = {
'age': [25, 30, 35, 40],
'salary': [50000, 60000, 70000, 80000],
'city': ['NYC', 'LA', 'Chicago', 'Boston']
}
df = pd.DataFrame(data)
# Из списка словарей
data = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 30}
]
df = pd.DataFrame(data)
Селекция данных
Series:
salaries = pd.Series([50000, 60000, 55000, 70000],
index=['Alice', 'Bob', 'Charlie', 'David'])
# По позиции (iloc)
print(salaries.iloc[0]) # 50000 (первый элемент)
print(salaries.iloc[0:2]) # Series с Alice и Bob
# По метке (loc)
print(salaries.loc['Bob']) # 60000
print(salaries['Bob']) # 60000 (сокращённо)
# Фильтрация
high_earners = salaries[salaries > 55000] # 60000, 70000
DataFrame:
# Выбрать одну колонку (возвращает Series)
df['salary'] # или df.salary
# Выбрать несколько колонок (возвращает DataFrame)
df[['name', 'salary']] # Двойные скобки!
# Выбрать строку по индексу
df.iloc[0] # Первая строка
df.loc[0] # Строка с индексом 0
# Фильтрация
df[df['salary'] > 55000] # Строки, где salary > 55000
# Условное выбора
df.loc[df['department'] == 'Sales']
Операции
Series операции:
salaries = pd.Series([50000, 60000, 55000, 70000])
# Математические операции
print(salaries + 5000) # Все значения + 5000
print(salaries * 1.1) # Все значения * 1.1
# Агрегирование
print(salaries.sum()) # 235000
print(salaries.mean()) # 58750
print(salaries.max()) # 70000
print(salaries.min()) # 50000
print(salaries.describe()) # Статистика
DataFrame операции:
df = pd.DataFrame({
'salary': [50000, 60000, 55000, 70000],
'bonus': [5000, 6000, 5500, 7000]
})
# По колонкам
print(df.sum()) # Сумма по каждой колонке
print(df.mean()) # Среднее по каждой колонке
# По строкам
print(df.sum(axis=1)) # Сумма по каждой строке
# Применить функцию
df['total'] = df['salary'] + df['bonus']
# Трансформация
df_scaled = (df - df.mean()) / df.std() # Стандартизация
Практические примеры
Пример 1: Работа с Series
import pandas as pd
# Логирование показателей за месяц
revenue_by_day = pd.Series({
'Monday': 1000,
'Tuesday': 1200,
'Wednesday': 950,
'Thursday': 1100,
'Friday': 1300
})
# Анализ
print(f"Средний доход: {revenue_by_day.mean()}") # 1110
print(f"Максимум: {revenue_by_day.max()}") # 1300
best_day = revenue_by_day.idxmax() # 'Friday'
print(f"Лучший день: {best_day}")
Пример 2: DataFrame для анализа
# Данные о продажах
sales_data = pd.DataFrame({
'date': pd.date_range('2024-01-01', periods=5),
'product': ['A', 'B', 'A', 'C', 'B'],
'quantity': [10, 15, 8, 20, 12],
'price': [100, 50, 100, 30, 50]
})
# Добавить колонку с суммой
sales_data['total'] = sales_data['quantity'] * sales_data['price']
# Группировка
sales_by_product = sales_data.groupby('product')['total'].sum()
# A: 1800
# B: 1200
# C: 600
# Объединение с DataFrame
print(sales_data.merge(
sales_by_product.to_frame(name='product_total'),
left_on='product', right_index=True
))
Пример 3: Преобразование Series в DataFrame и наоборот
# Series в DataFrame
series = pd.Series([1, 2, 3, 4], name='values')
df = series.to_frame() # Создаст DataFrame с одной колонкой
# DataFrame в Series
df = pd.DataFrame({'col1': [1, 2, 3]})
ds = df['col1'] # Вернёт Series
# Много Series в DataFrame
s1 = pd.Series([1, 2, 3], name='col1')
s2 = pd.Series([4, 5, 6], name='col2')
df = pd.concat([s1, s2], axis=1) # Объединить в DataFrame
Итог
- Series — одномерный массив для работы с одной колонкой
- DataFrame — двумерная таблица для работы с несколькими колонками
- DataFrame состоит из Series — каждая колонка это Series
- В аналитике чаще работаешь с DataFrame, но Series важна для отдельных колонок и операций