Открыть сервис

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 является основным инструментом в следующих областях:

Примеры

Создание 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 для многомерных данных).

Источники

  1. McKinney, W. (2012). Python for Data Analysis. O'Reilly Media.
  2. Документация pandas: https://pandas.pydata.org/docs/
  3. Wickham, H. (2014). Advanced R. Chapman & Hall/CRC. (Глава о data frames)
  4. Apache Spark Documentation: https://spark.apache.org/docs/latest/sql-programming-guide.html
  5. Статья «DataFrame» в Википедии (на английском языке).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →