Операции со столбцами Pandas: от основ до сложных решений

Раздел: Библиотеки -> pandas

Основные операции со столбцом DataFrame

В pandas работа со столбцами включает создание, чтение, модификацию и удаление. Основной способ обращения - через квадратные скобки с именем столбца. Рассмотрим эффективные методы и альтернативы.

Как выполнить базовое присваивание столбца?

Прямое присваивание через df['col'] = значение

import pandas as pd
df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]})
df['C'] = df['A'] + df['B']  # создание нового столбца
df['A'] = df['A'] * 2        # изменение существующего
print(df)

Column values python (значения столбца в python (pandas))

   A  B  C
0  2  4  5
1  4  5  7
2  6  6  9

Python наборы данных (наборы данных в python)

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

Частая ошибка:

При работе со срезом DataFrame (например, df2 = df[df['A'] > 0]) пандас может вызвать предупреждение SettingWithCopyWarning при попытке изменения столбца. Рекомендуется использовать .loc для избегания неопределённого поведения. Например: df.loc[df['A'] > 0, 'B'] = 10.

Как создать столбец с помощью метода assign?

Метод .assign возвращает новый DataFrame с добавленным столбцом, оставляя исходный без изменений. Это полезно при цепочечных вычислениях (method chaining).

df2 = df.assign(D = df['A'] * 3)
print(df2)
print(df)

работа с dataframe python (работа с dataframe в python)

   A  B  C   D
0  2  4  5   6
1  4  5  7  12
2  6  6  9  18
   A  B  C
0  2  4  5
1  4  5  7
2  6  6  9

Python работа с большими данными (работа с большими данными в python)

Можно передавать несколько столбцов одновременно: df.assign(X = ..., Y = ...).

Проблема:

assign не изменяет исходный объект, поэтому если нужно модифицировать существующий DataFrame, потребуется приравнивание: df = df.assign(...). Также внутри assign нельзя напрямую ссылаться на вновь создаваемые столбцы (для этого используется .eval).

Как вставить столбец на определённую позицию?

Метод .insert вставляет столбец в заданное место по индексу. Он изменяет исходный DataFrame.

df.insert(loc=1, column='X', value=[7,8,9])
print(df)

Python pandas index (работа с индексом dataframe в pandas)

   A  X  B  C
0  2  7  4  5
1  4  8  5  7
2  6  9  6  9

Python dataframe строки (строки в dataframe pandas)

Параметр loc задаёт позицию (0 - первая колонка). По умолчанию allow_duplicates=False, при попытке вставить существующее имя возникнет ValueError.

Типичные ошибки:

Если указать loc за пределами длины столбцов, будет ошибка. Также нельзя вставить столбец с именем, которое уже есть, если не установить allow_duplicates=True (но это приведёт к дублированию имён).

Как применить функцию к каждому элементу столбца?

Для преобразования значений столбца подходит метод .apply, передающий функцию.

df['A'] = df['A'].apply(lambda x: x**2)
print(df)

Pandas python таблица (таблица pandas в python)

   A  X  B  C
0  4  7  4  5
1 16  8  5  7
2 36  9  6  9

столбец dataframe python (работа со столбцом dataframe в pandas)

Однако .apply работает медленнее векторизованных операций. Для простых арифметических преобразований предпочтительнее использовать прямые операции с сериями (например, df['A'] = df['A'] ** 2).

Проблема производительности:

При больших данных .apply может быть значительно медленнее. Если функция не векторизована, стоит рассмотреть .map для замен по словарю или .transform для групповых вычислений.

Как заменить значения столбца по словарю?

Метод .map позволяет заменить значения на основе заданного словаря или функции.

df['Y'] = df['A'].map({4: 'четыре', 16: 'шестнадцать'})
print(df)

потоки данных python (потоки данных в python)

   A  X  B  C          Y
0  4  7  4  5     четыре
1 16  8  5  7 шестнадцать
2 36  9  6  9         NaN

Data find python (поиск данных в python)

Если значение отсутствует в словаре, результат становится NaN. Для замены можно задать параметр na_action='ignore', но он не заполняет отсутствующие значения.

Сложности:

Если словарь не включает все уникальные значения, появляются пропуски. Для полной замены всех значений следует использовать .replace, который оставляет несовпадающие значения без изменений.

Как переименовать столбец?

Для переименования столбца применяют .rename с аргументом columns (словарём старого и нового имён) или присваивают новый список .columns.

df.rename(columns={'A': 'Alpha', 'B': 'Beta'}, inplace=True)
print(df)

Process data python (обработка данных в python)

   Alpha  X  Beta  C          Y
0     4  7     4  5     четыре
1    16  8     5  7 шестнадцать
2    36  9     6  9         NaN

функция pandas python (функции pandas в python)

Второй способ: df.columns = ['a','b','c','d','e'] (задание всего списка).

Распространённая ошибка:

Если inplace не указать (по умолчанию False), .rename вернёт новый объект, не изменяя исходный. Многие забывают присвоить результат или inplace=True.

Как удалить столбец?

Удаление столбца выполняется оператором del, методом .drop или .pop.

del df['Y']  # удаление столбца Y
# или df.drop('Y', axis=1, inplace=True)
print(df)

Python get url (получение url в python)

   Alpha  X  Beta  C
0     4  7     4  5
1    16  8     5  7
2    36  9     6  9

.pop('col') удаляет столбец и возвращает его как Series. .drop не изменяет оригинал без inplace.

Проблемы:

Если столбец не существует, возникает KeyError. Для безопасного удаления можно использовать errors='ignore' в .drop.

- Python get path (получение пути в python)
- Get string python (получение строки в python)
- выводить только числа python (фильтрация чисел в python)

Продвинутые примеры работы со столбцами

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

Пример 1: Обработка текстовых столбцов с .str

Предположим, есть столбец с именами, в котором требуется привести все к нижнему регистру и извлечь первые три буквы.

Пример
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']})
df['name_lower'] = df['name'].str.lower()
df['first3'] = df['name'].str[:3]
print(df)
      name name_lower first3
0    Alice      alice    Ali
1      Bob        bob    Bob
2  Charlie    charlie    Cha

Пример 2: Извлечение компонентов даты из столбца datetime

Если столбец содержит даты, можно извлечь год, месяц, день.

Пример
dates = pd.to_datetime(['2023-01-15', '2024-07-20', '2025-12-31'])
df['date'] = dates
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
print(df[['date','year','month','day']])
       date  year  month  day
0 2023-01-15  2023      1   15
1 2024-07-20  2024      7   20
2 2025-12-31  2025     12   31

Пример 3: Скользящее среднее с .rolling

Добавление столбца со скользящим средним за 3 периода.

Пример
df = pd.DataFrame({'value': [10, 20, 30, 40, 50]})
df['rolling_mean_3'] = df['value'].rolling(window=3).mean()
print(df)
   value  rolling_mean_3
0     10             NaN
1     20             NaN
2     30            20.0
3     40            30.0
4     50            40.0

Пример 4: Групповое преобразование с .groupby().transform

Создание столбца со средним по группе без изменения количества строк.

Пример
df = pd.DataFrame({'group': ['A','A','B','B','C'],
                   'value': [1,2,3,4,5]})
df['group_mean'] = df.groupby('group')['value'].transform('mean')
print(df)
  group  value  group_mean
0     A      1         1.5
1     A      2         1.5
2     B      3         3.5
3     B      4         3.5
4     C      5         5.0

Пример 5: Категоризация непрерывных значений с .cut

Преобразование числового столбца в категории на основе интервалов.

Пример
df = pd.DataFrame({'age': [18, 25, 35, 45, 60]})
df['age_group'] = pd.cut(df['age'], bins=[0, 30, 50, 100], labels=['молодой', 'средний', 'пожилой'])
print(df)
   age age_group
0   18   молодой
1   25   молодой
2   35   средний
3   45   средний
4   60   пожилой

Пример 6: Использование .query для фильтрации по условию и создание нового столбца

Метод .query позволяет фильтровать строки по условию, а затем добавлять метку.

Пример
df = pd.DataFrame({'x': [1,2,3,4,5]})
df['label'] = 'low'
df.loc[df['x'] > 3, 'label'] = 'high'
# альтернатива с .query и .assign:
df2 = df.query('x > 3').assign(label='high')
print(df)
   x label
0  1   low
1  2   low
2  3   low
3  4  high
4  5  high

Работа со столбцом DataFrame в pandas - comments

En
столбец dataframe python (python)