Операции со столбцами 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)

обработка больших данных python (обработка больших данных в python)

   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)

Python подготовка данных (подготовка данных в 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

работа с dataframe python (работа с dataframe в 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 работа с большими данными (работа с большими данными в python)

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

структурированные данные python (структурированные данные в python)

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

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

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

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

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

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

генерация данных python (генерация данных в python)

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

Python код символа (код символа в python)

Однако .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

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

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

Сложности:

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

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

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

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

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

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

Python преобразование в строку (преобразование в строку в 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 как проверить строку (проверка строки в 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 наборы данных (наборы данных в python)
- Python dataframe строки (строки в dataframe pandas)
- столбец dataframe python (работа со столбцом dataframe в pandas)

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

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

Пример 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)