Арифметические и логические операции в Pandas

Применение математических и логических операций к таблицам в Pandas

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

Арифметические операции

Базовые операции

Базовые арифметические операции могут быть применены ко всему DataFrame или к отдельным столбцам.

import pandas as pd

# Создаем простой DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

# Прибавляем константу
print(df + 2)

#    A  B
# 0  3  6
# 1  4  7
# 2  5  8

Операции между столбцами

Операции могут выполняться между столбцами:

df['C'] = df['A'] + df['B']
print(df['C'])

# 0    5
# 1    7
# 2    9
# Name: C, dtype: int64

Операции с использованием функций

Иногда необходимы более сложные операции, для которых можно использовать apply:

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

# 0    1
# 1    4
# 2    9
# Name: D, dtype: int64

Арифметические операции с разными индексами

Pandas умеет автоматически выравнивать данные по индексам при выполнении операций:

df1 = pd.DataFrame({'A': [1, 2, 3]}, index=['a', 'b', 'c'])
df2 = pd.DataFrame({'A': [4, 5, 6]}, index=['b', 'c', 'd'])
print(df1 + df2)

#      A
# a  NaN
# b  6.0
# c  8.0
# d  NaN

Логические операции

Логические операции часто используются для фильтрации данных.

Базовые условия

result = df[df['A'] > 2]

Комбинированные условия

Для комбинации условий используются операторы & (и), | (или) и ~ (не):

result = df[(df['A'] > 2) & (df['B'] < 6)]

Метод eval() для вычислений

eval() позволяет быстро выполнять сложные выражения:

df.eval('C = A + B', inplace=True)

Сравнение DataFrame

Сравнение двух DataFrame позволяет проверить, равны ли они:

print(df1.equals(df2))

Обработка отсутствующих данных при арифметических операциях

Когда вы выполняете арифметические операции между двумя DataFrame или Series, может возникнуть ситуация, когда в одном из объектов отсутствует значение. Pandas предоставляет способы обработки таких ситуаций:

df1 = pd.DataFrame({'A': [1, 2, 3, 4]})
df2 = pd.DataFrame({'A': [10, 20, 30]})
print(df1 + df2)

#       A
# 0  11.0
# 1  22.0
# 2  33.0
# 3   NaN

В результате вы получите NaN там, где отсутствуют значения. Для замены NaN на конкретное значение используйте метод fillna():

df1 = pd.DataFrame({'A': [1, 2, 3, 4]})
df2 = pd.DataFrame({'A': [10, 20, 30]})
result = (df1 + df2).fillna(0)
print(result)

#       A
# 0  11.0
# 1  22.0
# 2  33.0
# 3   0.0

Логические операции с использованием isin()

Метод isin() полезен, когда нужно отфильтровать данные на основе списка значений:

values = [2, 4]
filtered = df[df['A'].isin(values)]

print(filtered)

#    A  B
# 1  2  5

Комбинирование данных с where

Используйте where для комбинирования данных из двух DataFrame на основе условия:

df1 = pd.DataFrame({'A': [1, 2, 3]})
df2 = pd.DataFrame({'A': [10, 20, 30]})
combined = df1.where(df1 > 2, df2)

print(combined)

#     A
# 0  10
# 1  20
# 2   3

В этом примере в combined будет значение из df1, если значение в df1 больше 2, иначе будет значение из df2.

Заключение

В Pandas предоставлен широкий спектр инструментов для арифметических и логических операций, что делает обработку данных гибкой и эффективной. Совет: чем больше вы практикуетесь, тем легче будет найти оптимальный способ решения вашей конкретной задачи.

Содержание: