DataFrame¶
DataFrame — это структура данных, предназначенная для хранения и обработки табличных данных, организованных в виде двумерной (строки и столбцы) изменяемой коллекции, в которой каждый столбец может содержать данные одного типа. DataFrame является одной из ключевых абстракций в экосистеме языков программирования, используемых для анализа данных, и наиболее широко применяется в библиотеке pandas языка Python, а также в Apache Spark, R (где это понятие было введено раньше) и Julia.
¶История
Концепция DataFrame впервые была реализована в языке программирования R в 1990-х годах. В пакете data.frame (часть базовой установки R) была предложена структура, объединяющая векторы одинаковой длины, но разных типов, что позволяло моделировать статистические таблицы. В 2008 году разработчики Wes McKinney и другие начали создание библиотеки pandas для Python, которая заимствовала и расширила идеи из R. Первый публичный релиз pandas (0.1) состоялся в 2011 году. С тех пор DataFrame стал стандартом де-факто для работы с табличными данными в Python, а затем и в других языках (например, в Julia — пакет DataFrames.jl, в Apache Spark — DataFrame API).
¶Классификация и виды
DataFrame можно классифицировать по среде выполнения и способу обработки данных:
¶По месту выполнения
- In-memory DataFrame: данные полностью загружаются в оперативную память. Примеры: pandas DataFrame, R data.frame, Julia DataFrames.jl. Подходит для наборов данных, помещающихся в ОЗУ (обычно до десятков гигабайт).
- Распределённый DataFrame: данные хранятся и обрабатываются на кластере из нескольких машин. Примеры: Apache Spark DataFrame, Dask DataFrame. Позволяет работать с данными, размер которых превышает объём памяти одной машины (терабайты и петабайты).
¶По типу данных
- Гомогенный DataFrame: все столбцы имеют один тип (например, только числа). Встречается редко, чаще в матричных вычислениях.
- Гетерогенный DataFrame: столбцы могут быть разных типов (числа, строки, даты, булевы значения). Это стандартный случай.
¶Устройство и характеристики
DataFrame, как правило, реализован как набор Series (одномерных массивов с метками) или как коллекция столбцов, каждый из которых является вектором. Ключевые характеристики:
- Индексы: каждая строка имеет уникальный идентификатор (метку) — индекс. Индексы могут быть целыми числами, датами, строками или составными (MultiIndex).
- Столбцы: каждый столбец имеет имя и содержит данные одного типа (например,
int64,float64,object(строка),datetime64). - Изменяемость: размер и содержимое DataFrame можно менять: добавлять/удалять строки и столбцы, изменять значения ячеек.
- Размерность: двумерная структура (строки × столбцы), хотя существуют расширения (Panel, 3D-структуры), которые в pandas были объявлены устаревшими.
¶Основные методы и операции
DataFrame предоставляет богатый API для манипуляции данными:
- Чтение и запись:
read_csv(),read_excel(),read_sql(),to_csv(),to_excel(),to_parquet(). - Выборка и фильтрация:
loc[](по меткам),iloc[](по позициям),query(),filter(),isin(). - Агрегация и группировка:
groupby(),agg(),sum(),mean(),count(),pivot_table(). - Обработка пропусков:
isna(),dropna(),fillna(). - Слияние и объединение:
merge(),join(),concat(). - Применение функций:
apply(),applymap(),map(). - Сортировка:
sort_values(),sort_index().
¶Применение
DataFrame является основным инструментом в следующих областях:
- Анализ данных и статистика: исследовательский анализ (EDA), расчёт описательных статистик, корреляций, построение гистограмм и графиков (через библиотеки визуализации, например, Matplotlib, Seaborn).
- Обработка и очистка данных: удаление дубликатов, заполнение пропусков, преобразование типов, нормализация, объединение таблиц из разных источников.
- Машинное обучение: подготовка признаков (feature engineering), разделение на обучающую и тестовую выборки, создание матриц признаков для моделей (например, через
pd.get_dummies()для категориальных переменных). Библиотеки машинного обучения (scikit-learn, TensorFlow, PyTorch) часто принимают DataFrame на вход. - Финансы и экономика: анализ временных рядов (котировки акций, макроэкономические показатели), расчёт скользящих средних, доходности, волатильности.
- Научные исследования: обработка экспериментальных данных, таблиц с результатами измерений, биоинформатика (например, анализ экспрессии генов).
¶Примеры
¶Создание DataFrame в pandas (Python)
```python import pandas as pd
¶Из словаря
data = {'Имя': ['Анна', 'Борис', 'Виктор'], 'Возраст': [25, 30, 35], 'Город': ['Москва', 'Санкт-Петербург', 'Новосибирск']} df = pd.DataFrame(data) print(df) ```
Вывод: `` Имя Возраст Город 0 Анна 25 Москва 1 Борис 30 Санкт-Петербург 2 Виктор 35 Новосибирск ``
¶Фильтрация и агрегация
```python
¶Фильтр: возраст > 28
filtered = df[df['Возраст'] > 28] print(filtered)
¶Средний возраст по городам
avg_age = df.groupby('Город')['Возраст'].mean() print(avg_age) ```
¶Работа с пропусками
```python import numpy as np df2 = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
¶Заполнить пропуски средним
df2_filled = df2.fillna(df2.mean()) print(df2_filled) ```
¶Критика и ограничения
Несмотря на широкую популярность, DataFrame имеет недостатки:
- Потребление памяти: в pandas DataFrame хранится в оперативной памяти, что может быть неэффективно для больших наборов данных (сотни гигабайт). Для решения используются распределённые версии (Dask, Spark) или форматы сжатия (Parquet, Feather).
- Производительность: операции с циклами по строкам (например,
iterrows()) крайне медленны. Рекомендуется использовать векторизованные операции илиapply(). - Сложность индексации: сложные многоуровневые индексы (MultiIndex) могут быть неинтуитивными и приводить к ошибкам.
- Отсутствие строгой типизации: в pandas столбцы могут содержать смешанные типы (например,
object), что замедляет вычисления и увеличивает риск ошибок.
¶Интересные факты
- Название «DataFrame» происходит от статистических терминов «data frame» (таблица данных) и «frame» (рамка, структура).
- В R функция
data.frame()является одной из самых часто используемых, а в Python —pd.DataFrame(). - В 2023 году библиотека pandas была включена в список наиболее популярных пакетов Python (по данным PyPI, более 100 миллионов загрузок в месяц).
- Существуют специализированные DataFrame для работы с временными рядами (например,
xarray.Datasetдля многомерных данных).
¶Источники
- McKinney, W. (2012). Python for Data Analysis. O'Reilly Media.
- Документация pandas: https://pandas.pydata.org/docs/
- Wickham, H. (2014). Advanced R. Chapman & Hall/CRC. (Глава о data frames)
- Apache Spark Documentation: https://spark.apache.org/docs/latest/sql-programming-guide.html
- Статья «DataFrame» в Википедии (на английском языке).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


