TGViewer
Machine learning Interview Machine learning Interview @machinelearning_interview · 30.4K subscribers
Post #457 4K
🐼Как устроен Pandas: взгляд изнутри

Структура данных Pandas
Как правило, датафрейм поддерживается каким-нибудь массивом, например NumPy или Pandas ExtensionArray. Эти массивы хранят данные датафрейма. pandas добавляет промежуточный слой Block и BlockManager. Он управляет этими массивами, обеспечивая максимальную эффективность операций. Это одна из причин, почему в Pandas методы, работающие с несколькими столбцами, могут быть очень быстрыми. Далее более подробно рассмотрим упомянутые слои.

Массивы
Фактические данные датафрейма могут храниться в наборе массивов NumPy или Pandas ExtensionArray. Этот слой обычно направляет к базовой реализации, например использует NumPy API при условии хранения данных в массивах NumPy. Pandas хранит в них данные и вызывает свои методы без расширения интерфейса.

Массивы NumPy обычно являются двумерными и дают ряд преимуществ в производительности, о которых речь пойдет далее. На данный момент Pandas ExtensionArray в основном представляют собой одномерные структуры данных, благодаря чему операции становятся предсказуемыми.
Однако не обошлось и без недостатков: в ряде случаев страдает производительность.

ExtensionArray допускает применение датафреймов, которые поддерживаются массивами PyArrow и другими типами данных Pandas.

Block

Датафрейм обычно состоит из столбцов, представленных по крайней мере одним массивом. Как правило, имеется коллекция массивов, так как один массив может хранить только один определенный тип данных. Эти массивы хранят данные, но не владеют информацией о том, какие столбцы они представляют. Каждый массив из датафрейма обернут соответствующим блоком Block.
✔ Block добавляет дополнительную информацию в массивы, например расположение представленных им столбцов.
✔Block служит слоем вокруг фактических массивов с возможностью расширения вспомогательными методами, необходимыми для операций Pandas.
✔ При выполнении фактической операции с датафреймом Block гарантирует, что метод направляется в базовый массив. Например, при вызове astype он убедится, что эта операция вызывается в массиве.

Данный слой не располагает информацией о других столбцах в датафрейме, являясь автономным объектом.

BlockManager
Как следует из названия, BlockManager управляет всеми Block, связанными с одним датафреймом. Он содержит сами Block и информацию об осях датафрейма, например имена столбцов и метки Index.
И самое главное в том, что он направляет большинство операций к фактическим Block:

df.replace(...)

BlockManager гарантирует, что replace выполняется для каждого Block.

Понятие консолидированного датафрейма
Мы исходим из того, что датафреймы поддерживаются типами данных NumPy, например их данные могут храниться в двумерных массивах.

При создании датафрейма Pandas гарантирует, что на каждый тип данных приходится только один Block:

df = pd.DataFrame(
{
"a": [1, 2, 3],
"b": [1.5, 2.5, 3.5],
"c": [10, 11, 12],
"d": [10.5, 11.5, 12.5],
}
)

У этого датафрейма есть 4 столбца, представленные двумя массивами: один из них хранит целочисленный тип данных, а другой — числа с плавающей точкой. Это и есть консолидированный датафрейм.

Добавим новый столбец к этому датафрейму:
df["new"] = 100

У него такой же тип данных, как и у существующих столбцов "a" и "c". Рассмотрим 2 возможных варианта дальнейших действий:

1. Добавление нового столбца в существующий массив, содержащий целочисленные столбцы.
2. Создание нового массива только для хранения нового столбца.

◾️ Первый вариант предусматривает добавление нового столбца в существующий массив. Для этого требуется скопировать данные, поскольку NumPy не поддерживает эту операцию без копирования. В итоге добавление одного столбца оборачивается слишком большими затратами.

◾️ Второй вариант

📌 Читать

@machinelearning_interview
  • 👍 12
  • ❤ 2
  • 🥰 1
More from @machinelearning_interview
  1. Oct 18, 2026🏗 Обещал дата-центр для Gemini. Google заявила, что не участвует The Guardian обнаружила…
  2. Oct 17, 2026🔥 Полный гайд по локальному запуску DeepSeek на русском: от домашнего ПК до сервера с 8 G…
  3. Oct 16, 2026🦥 816 млрд параметров на Mac Studio: Unsloth выпустила GGUF для Muse Spark Open Модель по…
  4. Oct 16, 2026🔥 Модель на 125 млрд параметров на игровой видеокарте с 12 ГБ памяти. Strata позволяет за…
  5. Oct 15, 2026🤖 600 млрд параметров и миллион токенов контекста: StepFun открыла веса Step-5-Preview. М…
  6. Oct 15, 2026С вас идея, а Т-Банк за нее заплатит В Т-Банке ищут трейдеров, разработчиков и тех, кто пр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →