Как применить функцию построчно pandas?
Примитивный фрейм данных.
Пытаюсь записать в новый стоблец схожесть текста в столбцах a и b
def similarity(s1, s2): matcher = difflib.SequenceMatcher(None, s1, s2) return matcher.ratio()
Пробовал так,
zz[‘sim1’] = similarity(zz[‘a’], zz[‘b’])
zz['sim2'] = zz.apply(lambda row: similarity(zz['a'], zz['b']), axis=1)
Получается не то, что нужно. Как будто сравнивается весь стоблец сразу.
Нужно сравнить построчно и записать значение для каждой строки в новый столбец.
Буду благодарен любой помощи, наводки.
- Вопрос задан более двух лет назад
- 184 просмотра
Применение функции к двум столбцам Pandas DataFrame
Одной из распространенных задач при работе с данными в Pandas является применение определенной функции к одному или нескольким столбцам DataFrame. Иногда возникает необходимость применить функцию, которая принимает два аргумента, к двум столбцам DataFrame, и создать новый столбец на основе полученных результатов.
В качестве примера рассмотрим следующий DataFrame:
import pandas as pd df = pd.DataFrame(< 'A': [1, 2, 3], 'B': [4, 5, 6], >)
Пусть есть функция, которая принимает два аргумента и возвращает их сумму:
def add_two_numbers(x, y): return x + y
Требуется применить эту функцию к столбцам ‘A’ и ‘B’ и сохранить результат в новом столбце ‘C’.
Самым простым и эффективным способом сделать это является использование метода apply DataFrame. Однако, при попытке применить функцию напрямую к двум столбцам, возникает ошибка о несоответствии количества аргументов:
df['C'] = df[['A', 'B']].apply(add_two_numbers) # TypeError: ("add_two_numbers() missing 1 required positional argument: 'y'", 'occurred at index A')
Это происходит потому, что метод apply передает каждый столбец в функцию как отдельный аргумент, а функция ожидает два аргумента.
Чтобы решить эту проблему, можно использовать параметр axis метода apply и установить его значение равным 1. Это означает, что функция будет применяться к каждой строке DataFrame, а не к каждому столбцу:
df['C'] = df.apply(lambda row: add_two_numbers(row['A'], row['B']), axis=1)
Теперь новый столбец ‘C’ будет содержать сумму значений столбцов ‘A’ и ‘B’:
A B C 0 1 4 5 1 2 5 7 2 3 6 9
Таким образом, при применении функций к нескольким столбцам Pandas DataFrame, следует учитывать, как функция ожидает получать свои аргументы, и соответствующим образом использовать параметр axis метода apply .
Использование функции apply() для одного столбца в pandas
Одной из распространенных задач при работе с данными в python при помощи библиотеки pandas является преобразование значений одного столбца в датафрейме без влияния на другие столбцы. Например, есть датафрейм, содержащий столбцы «возраст» и «зарплата». Необходимо увеличить все значения в столбце «возраст» на 1, сохраняя при этом столбец «зарплата» без изменений.
В pandas для этой задачи можно использовать функцию apply(). Она позволяет применять функцию ко всем элементам столбца или строки.
Пример использования
import pandas as pd # Создание исходного датафрейма df = pd.DataFrame(< 'age': [25, 30, 35, 40], 'salary': [1000, 1500, 2000, 2500] >) # Функция для увеличения возраста на 1 def increase_age(x): return x + 1 # Применение функции к столбцу 'age' df['age'] = df['age'].apply(increase_age) print(df)
В этом примере создается датафрейм с двумя столбцами: ‘age’ и ‘salary’. Затем создается функция increase_age(), которая увеличивает переданное ей значение на 1. Эта функция применяется к столбцу ‘age’ с помощью метода apply(). В результате все значения в столбце ‘age’ увеличиваются на 1, а значения в столбце ‘salary’ остаются без изменений.
Таким образом, с помощью функции apply() можно легко преобразовывать данные в одном столбце датафрейма pandas, не затрагивая другие столбцы. Это делает ее удобным инструментом для обработки данных в python.
Pandas DataFrame: как упоительно работать с данными
Исчерпывающий гайд по самому популярному фреймворку в ML от эксперта по data science и машинному обучению.
Иллюстрация: Катя Павловская для Skillbox Media
Константин Зотов
Журналист, редактор. Фанат виртуальности во всех её видах — потому о ней и пишет.
Об авторе
Ph. d. в области машиностроения, доцент Нишского университета. Основная специализация: гибридные методы оптимизации и машинное обучение в энергетике. Владеет несколькими языками программирования, среди которых Python, C#, C и JavaScript.
ссылки
Источник
Pandas DataFrame активно применяют в data science, машинном обучении, научных вычислениях и многих других областях, связанных с активным использованием данных.
Эти структуры во многом похожи на SQL, таблицы Excel и Calc. Однако зачастую DataFrame быстрее, проще в использовании и мощнее — ведь это неотъемлемая часть экосистемы Python и NumPy.
Из этой статьи вы узнаете:
- Что такое DataFrame в Pandas и как его создать.
- Как получить доступ, изменить, добавить, отсортировать, отфильтровать и удалить данные.
- Как обрабатывать пропущенные значения.
- Как работать с временными рядами.
- Как быстро визуализировать данные.
- Создание из словарей
- Создание из списков
- Создание из массивов NumPy
- Создание из файлов
- Метки Pandas DataFrame как последовательность
- Данные в виде массивов NumPy
- Типы данных
- Размер Pandas DataFrame
- Получение данных с помощью аксессоров
- Установка данных с помощью аксессоров
- Вставка и удаление строк
- Вставка и удаление столбцов
- Применение арифметических операций
- Применение функций NumPy и SciPy
- Сортировка в Pandas DataFrame
- Фильтрация данных
- Работа со статистическими данными
- Обработка отсутствующих данных
- Расчёт с отсутствующими данными
- Заполнение недостающих данных
- Удаление строк и столбцов с отсутствующими данными
- Итерации в Pandas DataFrame
- Работа с временными рядами
- Создание DataFrame с метками временных рядов
- Индексирование и нарезка
- Ресемплинг и роллинг
- Графика в Pandas DataFrame
- Рекомендуемая литература
- Заключение
Что такое Pandas DataFrame
Pandas DataFrame (или просто дата фреймы) — это структуры, которые состоят из:
- данных, организованных в двух измерениях — строках и столбцах;
- и соответствующих этим строкам и столбцам меток.
Мы будем писать код в интерактивной консоли Python. Чтобы начать работу с Pandas, нужно импортировать её модуль:
В данном случае data— это переменная Python, которая ссылается на словарь, содержащий данные кандидатов. Она содержит метки столбцов:
А row_labels ссылается на список, содержащий метки строк, представляющих собой числа в диапазоне от 101 до 107.
Создадим Pandas DataFrame:
Каждый столбец Pandas DataFrame — это экземпляр класса Pandas.Series — структуры, которая содержит одномерные данные и их метки. Вызвать любой элемент из объектов Series можно так же, как из словаря, то есть используя его метку в качестве ключа:
Возвращаемая строка — тоже экземпляр Pandas.Series.
Создание Pandas DataFrame
Как уже упоминалось, существует несколько способов создать дата фрейм. В этом разделе вы научитесь делать это с помощью конструктора DataFrame, используя:
- словари Python;
- списки Python;
- двумерные массивы NumPy;
- файлы.
Есть и другие методы, о которых вы можете узнать из официальной документации.
Начнём с импорта NumPy, который пригодится нам дальше:
Однако в официальной документации Pandas рекомендуется использовать to_numpy(), потому что это более гибкий инструмент с полезными параметрами:
- dtype — используется, когда нужно указать тип данных результирующего массива. Значение умолчанию — None;
- copy — если хотите использовать исходные данные из DataFrame, установите этот параметр в False. Если хотите скопировать данные, установите True.
Тем не менее вам, скорее всего, чаще будет встречаться values, особенно в старых программах, потому что to_numpy() впервые был представлен только в Pandas 0.24.0.
Типы данных
Типы данных, или dtypes, важны, поскольку определяют объём памяти, который использует ваш DataFrame, скорость вычислений и уровень точности расчётов.
Pandas в основном построен на типах данных NumPy. Однако в Pandas 1.0 появились собственные дополнительные типы:
- BooleanDtype и BooleanArray — для поддержки отсутствующих логических значений и трёхзначной логики Клини.
- StringDtype и StringArray — специальные строковые типы.
Типы данных для каждого столбца Pandas DataFrame можно получить с помощью dtypes:
Тот же результат можно получить, применив plot.line(). У plot() и plot.line() есть много необязательных параметров, которые позволяют указать внешний вид графика.
Для сохранения изображения используется объединённая команда get_figure().savefig():
Настроить детали можно с помощью дополнительных методов и параметров: plot.hist(), plt.rcParams и многих других. Более подробную информацию вы найдёте в бесплатном учебнике Anatomy of Matplotlib.
Рекомендуемая литература
Pandas DataFrames — это очень многофункциональные объекты, которые поддерживают многие операции, не упомянутые в этой статье:
- Иерархическую (многоуровневую) индексацию;
- Группировку;
- Слияние, объединение и конкатенацию;
- Работу с категориальными данными.
Большинство доступных опций хорошо описано в официальном учебнике по Pandas. Если вы хотите узнать больше, можно ознакомиться со следующими руководствами (все они написаны на английском языке):
- Очистка данных в Pandas и NumPy;
- Pandas DataFrames 101;
- Знакомство с Pandas и Vincent;
- Python Pandas: приёмы и возможности, о которых вы могли не знать;
- Идиоматические Pandas: приёмы и возможности, о которых вы могли не знать;
- Чтение CSV в Pandas;
- Написание CSV в Pandas;
- Чтение и запись файлов CSV в Python;
- Чтение и запись файлов CSV;
- Использование Pandas для чтения больших файлов Excel в Python;
- Быстро, гибко, просто и интуитивно понятно: как ускорить ваши проекты в Pandas.
Если вам нужно работать данными более чем в двух измерениях, можно использовать Xarray — ещё одну мощную библиотеку Python, очень похожую на Pandas.
Для работы с большими объёмами данных есть также DataFrame API в Dask.
Заключение
Из этого гайда вы узнали:
- Что такое Pandas DataFrame и как его создать.
- Как получить доступ, изменить, добавить, отсортировать, отфильтровать и удалить данные.
- Как использовать подпрограммы NumPy с DataFrames.
- Как обрабатывать пропущенные значения.
- Как работать с данными временных рядов.
- Как визуализировать данные, содержащиеся в DataFrames.
Если хотите глубже изучить работу с данными в Python, ознакомьтесь с другими руководствами по Pandas на сайте Real Python.
Читайте также:
- Работаем с Pandas: основные понятия и реальные данные
- Тест: угадай известного программиста по его рабочему столу
- Чат-боты в Telegram на Python и Aiogram: пишем первого бота