🐼 Как Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ элСмСнты Π² Pandas с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ where?

ΠœΠ΅Ρ‚ΠΎΠ΄ replace() Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ pandas ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π·Π°ΠΌΠ΅Π½Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… DataFrame ΠΈΠ»ΠΈ Series Π² соотвСтствии с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ условиСм.

import pandas as pd

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ DataFrame
data = {'A': [1, 2, 3, 4, 5],
        'B': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)

# ЗамСняСм значСния Π² столбцС А, Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 3, Π½Π° 0
df['A'].replace(3, 0, inplace=True)
print(df)

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Π—Π°ΠΌΠ΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pandas where

Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ учится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ pandas, часто трСбуСтся произвСсти Π·Π°ΠΌΠ΅Π½Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ ΠΈΠ»ΠΈ DataFrame Π½Π° основС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ условия. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΠ΅Ρ‚ΠΎΠ΄ where() ΠΈΠ· pandas являСтся ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ инструмСнтом. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ where()?

ΠœΠ΅Ρ‚ΠΎΠ΄ where() позволяСт Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ значСния DataFrame с использованиСм условия. Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ DataFrame, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ значСния, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° NaN (Not a Number), Π»ΠΈΠ±ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ where(). Π£ нас Π΅ΡΡ‚ΡŒ DataFrame df, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ содСрТит числа. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π½Π° Π½ΡƒΠ»ΠΈ:


import pandas as pd

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ DataFrame
data = {'Numbers': [1, -2, 3, -4, 5]}
df = pd.DataFrame(data)

# ЗамСняСм ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π½Π° Π½ΡƒΠ»ΠΈ
df = df.where(df >= 0, other=0)

print(df)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:


   Numbers
0        1
1        0
2        3
3        0
4        5

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Π½ΡƒΠ»ΠΈ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ 'Numbers'.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ where() со слоТными условиями?

ΠœΠ΅Ρ‚ΠΎΠ΄ where() Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π±ΠΎΠ»Π΅Π΅ слоТными условиями. Для этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ & (логичСскоС И) ΠΈ | (логичСскоС Π˜Π›Π˜), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, == (Ρ€Π°Π²Π½ΠΎ) ΠΈ != (Π½Π΅ Ρ€Π°Π²Π½ΠΎ).

Рассмотрим Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π£ нас Π΅ΡΡ‚ΡŒ DataFrame с двумя ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ: 'Numbers' ΠΈ 'Categories'. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ 'Numbers', Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ 'Categories' Ρ€Π°Π²Π½ΠΎ 'A', Π½Π° 999:


import pandas as pd

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ DataFrame
data = {'Numbers': [1, -2, 3, -4, 5],
        'Categories': ['A', 'B', 'A', 'B', 'A']}
df = pd.DataFrame(data)

# ЗамСняСм ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ 'Numbers', Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… 'Categories' Ρ€Π°Π²Π½ΠΎ 'A', Π½Π° 999
df = df.where((df['Numbers'] >= 0) | (df['Categories'] != 'A'), other=999)

print(df)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:


   Numbers Categories
0        1          A
1      999          B
2        3          A
3      999          B
4        5          A

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ 'Numbers', Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ 'Categories' Ρ€Π°Π²Π½ΠΎ 'A', Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° 999.

Π—Π°ΠΌΠ΅Π½Π° с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для Π±ΠΎΠ»Π΅Π΅ слоТных ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вмСсто простых условий. Ѐункция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту DataFrame, ΠΈ Π½Π° основС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΎ, Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρƒ нас Π΅ΡΡ‚ΡŒ DataFrame с ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΎΠΉ 'Numbers'. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π½Π° ΠΈΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, Π° ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π½Π° ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»ΡŒ:


import pandas as pd
import numpy as np

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ DataFrame
data = {'Numbers': [1, -2, 3, -4, 5]}
df = pd.DataFrame(data)

def replace_func(x):
    if x >= 0:
        return x**2
    else:
        return np.abs(x)

# ЗамСняСм значСния Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ 'Numbers' с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ replace_func
df['Numbers'] = df['Numbers'].apply(replace_func)

print(df)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:


   Numbers
0        1
1        4
2        9
3        4
4       25

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° ΠΈΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, Π° ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа - Π½Π° ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ 'Numbers'.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄ where() ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ pandas прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ для Π·Π°ΠΌΠ΅Π½Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² DataFrame с использованиСм условий. Он позволяСт Π»Π΅Π³ΠΊΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простых ΠΈΠ»ΠΈ слоТных условий, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ where(), ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ Π² DataFrame Π½Π° основС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ условия.

Π£Ρ‡Π΅Π±Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»:

- pandas.DataFrame.where()

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

How to Replace Values of Dataframes | Replace, Where, Mask, Update and More

Pandas Replace | pd.DataFrame.replace()

Part 6 - replace() Function in Pandas | Pandas Complete Tutorial

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

🐼 Как Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ элСмСнты Π² Pandas с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ where?