Чтобы создавать или изменять условия столбцов, мы можем использовать функцию np.where() в Pandas Python. np.where() принимает условие в качестве аргумента и соответственно возвращает результат. Кроме того, мы можем фильтровать строки с некоторыми условиями и обрабатывать недостающие данные или значения NaN в кадре данных Python Pandas.
np.where в Python можно рассматривать как векторизованную форму троичного числа x, если условие, иначе y. В качестве аргументов он принимает условие и два параметра: если условие выполнено, выводится первый вариант, в противном случае он возвращает второе.
Давайте посмотрим базовый пример использования функции np.where() в Python.
import numpy as np arr = np.array([1, 2, 3, 4, 5]) indices = np.where(arr > 3) print(indices)
Вывод:
(array([3, 4], dtype=int64),)
- Синтаксис
- Параметр
- Возвращаемое значение
- Случай 1: с условным созданием или изменением столбца
- Случай 2: в нескольких столбцах
- Случай 3: для фильтрации строк
- Случай 4: для обработки недостающих данных
- Случай 5: с несколькими условиями
Синтаксис
Основной синтаксис np.where в Python:
np.where(condition, [x, y])
Параметр
Здесь основные параметры, необходимые для функции NumPywhere():
Имя | Описание |
---|---|
condition | Структура, подобная массиву, где каждый элемент проверяется на соответствие условию. Он возвращает массив в Python с элементами из x или y, в зависимости от того, истинно или ложно условие. |
x | (Необязательно) Массив или скалярное значение, возвращаемое, если условие истинно. |
y | (Необязательно) Массив или скалярное значение, возвращаемое, если условие имеет значение False. |
Возвращаемое значение
Если указаны и x, и y, мы получим массив Python NumPy. Он содержит элементы x, где условие истинно, и элементы из y в противном случае. Если задано только условие, numpy.where возвращает индексы элементов, которые имеют значение True.
Pandas построен на основе NumPy в Python, а это означает, что мы часто можем использовать функции NumPy непосредственно в сериях Pandas и DataFrames. Эта совместимость распространяется на np.where в Pandas Python, что позволяет выполнять плавные условные операции внутри DataFrame.
Давайте рассмотрим некоторые варианты использования np.where в Pandas Python.
Случай 1: с условным созданием или изменением столбца
Мы можем использовать np.where для создания нового столбца в DataFrame Pandas в Python на основе условия или для изменения существующего.
Пример: предположим, что у нас есть df Pandas DataFrame с возрастом столбца в Python. Мы хотим создать новый столбец age_group, который помечает каждого человека как «взрослый» или «ребенок» в зависимости от его возраста с помощью np.where() в Python.
import pandas as pd import numpy as np df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 12, 32]}) df['age_group'] = np.where(df['age'] < 18, 'child', 'adult') print(df)
Вывод:
name age age_group 0 Alice 25 adult 1 Bob 12 child 2 Charlie 32 adult
Случай 2: в нескольких столбцах
Реальная мощь np.where в Pandas проявляется, когда мы применяем его к нескольким столбцам кадра данных в Python.
Пример. Рассмотрим DataFrame в Python Pandas с данными, включая столбцы «Доход» и «Затраты». Мы хотим добавить новый столбец «Прибыльность», в котором указывается «Да», если «Доход» превышает «Затраты», и «Нет» в противном случае.
import numpy as np import pandas as pd df = pd.DataFrame({ 'Product': ['Widget A', 'Widget B', 'Widget C'], 'Revenue': [1500, 800, 1200], 'Cost': [1000, 700, 500] }) df['Profitable'] = np.where(df['Revenue'] > df['Cost'], 'Yes', 'No') print(df)
Вывод:
Product Revenue Cost Profitable 0 Widget A 1500 1000 Yes 1 Widget B 800 700 Yes 2 Widget C 1200 500 Yes
Случай 3: для фильтрации строк
Хотя Pandas уже имеет мощные возможности запросов, np.where в Pandas Python можно использовать для индексации и фильтрации строк в определенных сценариях.
Пример. Допустим, у нас есть DataFrame Pandas в Python, содержащий информацию, и мы хотим отфильтровать строки с помощью функции numpy.where().
import pandas as pd import numpy as np df = pd.DataFrame({ 'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'], 'age': [25, 17, 32, 15, 22] }) indices = np.where(df['age'] >= 18)[0] adults_df = df.iloc[indices] print(adults_df)
Вывод:
name age 0 Alice 25 2 Charlie 32 4 Eva 22
Случай 4: для обработки недостающих данных
np.where в Pandas Python также является полезным инструментом для работы с отсутствующими значениями или значениями NaN путем условной замены их определенным значением.
Пример: здесь мы используем np.where() в Pandas Python для условной замены отсутствующих значений в DataFrame.
import pandas as pd import numpy as np df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [np.nan, 1, 2]}) print("Before the Dataframe was:\n", df) df['A'] = np.where(df['A'].isna(), 0, df['A']) print("After the Operation, Dataframe is:\n", df)
Вывод:
Before the Dataframe was: A B 0 1.0 NaN 1 2.0 1.0 2 NaN 2.0 After the Operation, Dataframe is: A B 0 1.0 NaN 1 2.0 1.0 2 0.0 2.0
Случай 5: с несколькими условиями
Мы также можем использовать np.where в Pandas Python для оценки нескольких условий. Для этой цели мы часто используем логические операторы типа &(и), |(или) и ~(нет) из Python.
Пример: скажем, у нас есть фрейм данных Python Pandas, и мы хотим пометить наши данные некоторыми значениями, основанными на других столбцах. Для этого мы можем использовать np.where() в Pandas Python.
import numpy as np import pandas as pd df = pd.DataFrame({ 'Product': ['Widget A', 'Widget B', 'Widget C'], 'Revenue': [1500, 800, 1200], 'Cost': [1000, 700, 500] }) condition_high_profit =(df['Revenue'] > 1000) &(df['Cost'] < 500) condition_low_profit =(df['Revenue'] <= 1000) &(df['Cost'] 1000) &(df['Cost'] >= 500) df['Profit_Category'] = np.where( condition_high_profit, 'High Profit', np.where( condition_low_profit, 'Low Profit', np.where( condition_high_loss, 'High Loss', 'Low Loss' ) ) ) print(df)
Вывод:
Product Revenue Cost Profit_Category 0 Widget A 1500 1000 High Loss 1 Widget B 800 700 Low Loss 2 Widget C 1200 500 High Loss