2026, Jan 11 21:02

Как вставить слева столбец из трёх пробелов в pandas DataFrame

Разберём, как добавить слева в pandas DataFrame столбец из трёх пробелов: сдвиг меток столбцов и метод insert. Пошаговый код и советы для масштабируемых таблиц.

Добавить столбец в начало DataFrame pandas кажется пустяком, пока не понадобится сделать это так, чтобы сохранить форму данных и без проблем масштабироваться на сотни строк. Здесь задача конкретная: добавить новый самый левый столбец, заполненный тремя пробелами, и сдвинуть все существующие столбцы вправо, не нарушая целостность DataFrame.

Постановка задачи

Начнём с простого DataFrame с двумя числовыми столбцами и индексами по умолчанию, начинающимися с нуля. Нужно добавить столбец из трёх пробелов на позицию 0, чтобы текущие столбцы сдвинулись вправо на одну позицию.

import pandas as pnd
source_rows = [[5011025, 234], [5012025, 937], [5013025, 625]]
frame = pnd.DataFrame(source_rows)

Почему это непросто

По умолчанию pandas присваивает столбцам целочисленные метки 0, 1, 2, ... и выравнивает данные по этим меткам при операциях. Если просто добавить новый столбец с меткой 0, когда 0 уже существует, легко получить дубликаты меток или нарушенный порядок. Аккуратный способ — либо сдвинуть существующие метки перед вставкой нового столбца, либо воспользоваться встроенным API, которое умеет размещать столбцы по позиции.

Решение 1: Сдвинуть метки, затем добавить и упорядочить

Этот подход перенумеровывает существующие столбцы вправо, создаёт новый крайний левый столбец, а затем упорядочивает столбцы по меткам, чтобы получить ожидаемую последовательность.

import pandas as pnd
rows = [[5011025, 234], [5012025, 937], [5013025, 625]]
df_pad = pnd.DataFrame(rows)

# сдвинуть метки существующих столбцов на шаг вправо: 0->1, 1->2
df_pad.columns = df_pad.columns + 1

# создать новый крайний левый столбец с меткой 0 и тремя пробелами в каждой строке
df_pad[0] = '   '

# убедиться, что столбцы идут по возрастанию меток: 0, 1, 2
df_pad = df_pad.sort_index(axis=1)

Здесь всё прозрачно. Сначала столбцы получают метки 1 и 2. Затем добавляется новый столбец с меткой 0 и заполняется строкой из трёх пробелов для каждой строки. Наконец, сортировка столбцов по меткам гарантирует именно тот порядок, который нужен: 0, 1, 2, где левый столбец — это отступ.

Решение 2: insert для позиционной вставки

Есть и встроенный метод, который ставит столбец в заданную позицию и сдвигает остальные вправо. Если вас устраивает строковая метка нового столбца, всё решается одной строкой.

import pandas as pnd
seed = [[5011025, 234], [5012025, 937], [5013025, 625]]
grid = pnd.DataFrame(seed)

grid.insert(loc=0, column='pad', value=['   ']*len(grid))

Этот вызов напрямую вставляет новый столбец в крайнее левое положение и сохраняет число строк. Текущие столбцы сдвигаются вправо на одну позицию.

Зачем это нужно

Добавление слева в DataFrame отдельного столбца — небольшая, но частая операция форматирования, особенно при подготовке табличного вывода для систем, где ожидается фиксированный порядок столбцов. Зная и приём со сдвигом меток, и метод insert, вы можете выбирать между тонким контролем над метками и лаконичным API для позиционной вставки.

Итоги

Если новому столбцу нужна конкретная метка (например, 0) при сохранении числового порядка, сначала сдвиньте существующие метки, затем добавьте новый столбец и отсортируйте. Если важна только позиция и нужен быстрый явный приём, используйте insert с loc=0 и передайте список значений той же длины, что и DataFrame. В обоих вариантах весь DataFrame сдвигается вправо, а новый крайний левый столбец содержит по три пробела во всех строках.