# Kaip taikyti sąlygas pandas DataFrames su where()

Python pandas `DataFrame.where()` funkcija sukurta padėti **sąlygiškai tvarkyti duomenis** DataFrames. Ji leidžia programuotojams pakeisti arba užmaskuoti vertes [pandas DataFrame](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-pandas-duomenu-remelis/) pagal sąlygą.

## Kokia yra pandas `DataFrame.where()` sintaksė?

`where()` funkcija gali priimti iki penkių parametrų ir turi tokią sintaksę:

```python
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None)
```

Taikant DataFrame, tik vertės, atitinkančios nurodytą sąlygą (`cond`), liks nepakitusios. Visos kitos vertės bus pakeistos tomis, kurias nurodysite `other` parametre.

### Kokie parametrai gali būti naudojami su pandas `DataFrame.where()`?

Pandas `DataFrame.where()` priima įvairius parametrus, kurie palengvina lanksčią duomenų tvarkymą ir keitimą:

<table>
  <thead>
    <tr>
      <th><strong>Parametras</strong></th>
      <th><strong>Aprašymas</strong></th>
      <th><strong>Numatytasis vertė</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`cond`</td>
      <td>Sąlyga, kuri turi būti įvykdyta, kad DataFrame reikšmės liktų nepakitusios</td>
      <td></td>
    </tr>
    <tr>
      <td>`other`</td>
      <td>Vertė, kuri pakeičia sąlygos neatitinkančias vertes</td>
      <td></td>
    </tr>
    <tr>
      <td>`inplace`</td>
      <td>Nustačius `True`, operacija tiesiogiai pakeis DataFrame.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>`axis`</td>
      <td>Nurodo, kuriai ašiai taikoma sąlyga (`axis=0` – eilutėms, `axis=1` – stulpeliams)</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`level`</td>
      <td>Apibrėžia daugialypio indekso lygį, kuriam turėtų būti taikoma sąlyga.</td>
      <td>`None`</td>
    </tr>
  </tbody>
</table>

## Kaip naudoti pandas `DataFrame.where()`

`where()` funkcija gali būti naudinga įvairiais atvejais, kai reikia sąlyginio **duomenų tvarkymo**. Tai gali būti duomenų valymas arba **naujų stulpelių kūrimas pagal sąlygas**.

### Vertės pakeitimas pagal sąlygas

Tarkime, kad turite duomenų rėmelį su įmonės pardavimo rezultatais ir norite rodyti tik teigiamus rezultatus. Neigiami rezultatai turėtų būti pakeisti skaičiumi `0`. Tai galite padaryti naudodami pandas `DataFrame.where()`. Pirmiausia sukursime duomenų rėmelį:

```python
import pandas as pd
# Create a sample DataFrame
data = {
    'Region': ['North', 'South', 'East', 'West'],
    'Sales_Q1': [15000, -5000, 3000, -1000],
    'Sales_Q2': [20000, 25000, -7000, 5000]
}
df = pd.DataFrame(data)
print(df)
```

Pateiktas kodas sukuria tokį duomenų rėmelį:

```none
Region    Sales_Q1    Sales_Q2
0    North         15000         20000
1    South         -5000         25000
2     East            3000         -7000
3     West         -1000            5000
```

Naudodami `where()`, galite pakeisti visas neigiamas reikšmes `0`. Įsitikinkite, kad įtrauktos **tik stulpeliai su skaitinėmis reikšmėmis**, kitaip tai neveiks.

```python
# Replacing values using conditions
df_positive = df.copy()
df_positive[['Sales_Q1', 'Sales_Q2']] = df[['Sales_Q1', 'Sales_Q2']].where(df[['Sales_Q1', 'Sales_Q2']] > 0, 0)
print(df_positive)
```

Gautas duomenų rėmelis `df_positive` rodo tik teigiamus pardavimo rezultatus, o neigiamas reikšmes pakeičia `0`:

```none
Region    Sales_Q1    Sales_Q2
0    North         15000         20000
1    South                 0         25000
2     East            3000                 0
3     West                 0            5000
```

### Vertės maskavimas naudojant sąlygas

Pandas `DataFrame.where()` taip pat gali būti naudojamas verčių maskavimui. Tai reiškia, kad bus rodomos tik tam tikros DataFrame dalys. Toliau pateiktame pavyzdyje norime parodyti tik vertes, kurios viršija tam tikrą ribą (šiuo atveju `10000`). Atminkite, kad turite įsitikinti, jog vertinate tik stulpelius su skaitmeniniais duomenimis:

```python
# Only display values over 10000
df_masked = df.copy()
df_masked[['Sales_Q1', 'Sales_Q2']] = df[['Sales_Q1', 'Sales_Q2']].where(df[['Sales_Q1', 'Sales_Q2']] > 10000)
print(df_masked)
```

Gautas duomenų rėmelis `df_masked` rodo tik vertes, kurios yra didesnės nei `10000`. `NaN` naudojamas vietoj visų kitų verčių:

```none
Region    Sales_Q1    Sales_Q2
0    North     15000.0     20000.0
1    South             NaN     25000.0
2     East             NaN             NaN
3     West             NaN             NaN
```


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-pandas-dataframe-kur/](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-pandas-dataframe-kur/) for AI/LLM consumption.