# Kaip sujungti duomenų rėmus naudojant pandas merge()

Naudodami pandas funkciją `DataFrame.merge()`, galite sujungti DataFrames naudodami raktus. Tai leidžia efektyviai sujungti duomenis iš įvairių šaltinių, todėl galite atlikti išsamesnes analizes.

## Kokia yra pandas `merge()` sintaksė?

Python pandas DataFrame `merge()` metodas gali priimti įvairius parametrus, leidžiančius programuotojams nurodyti, kaip turėtų būti sujungiami DataFrames. Bendroji `merge()` funkcijos sintaksė yra tokia:

```python
DataFrame.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
```

Note Funkcija pandas `merge()` yra panaši į operaciją JOIN SQL. Turint patirties su reliacinėmis duomenų bazėmis, pvz., [SQL](https://www.ionos.com/lt-lt/digitalguide/serveris/zinios/kas-yra-sql/), gali būti lengviau suprasti, kaip veikia pandas DataFrame `merge()` metodas. Tačiau reikia nepamiršti, kad yra keletas skirtumų. Pandas, jei abiejų raktinių stulpelių reikšmės yra lygios *null*, šios reikšmės taip pat bus sujungtos.

### Kokie parametrai gali būti naudojami su pandas `merge`?

`merge()` priimtini įvairūs parametrai leidžia ne tik nurodyti, kuriuos [pandas DataFrames](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-pandas-duomenu-remelis/) derinti, bet ir kokį jungimo tipą naudoti, taip pat kitus detales.

<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>kairė</td>
      <td>Pirmasis sujungtinas duomenų rėmelis</td>
      <td></td>
    </tr>
    <tr>
      <td>dešinė</td>
      <td>Antrasis sujungtinas duomenų rėmelis</td>
      <td></td>
    </tr>
    <tr>
      <td>kaip</td>
      <td>Atliktino sujungimo operacijos tipas (`inner`, `outer`, `left`, `right`)</td>
      <td>`inner`</td>
    </tr>
    <tr>
      <td>į</td>
      <td>Stulpeliai arba indeksų lygiai, kurie bus naudojami kaip raktiniai žodžiai; turi būti abiejuose DataFrame</td>
      <td></td>
    </tr>
    <tr>
      <td>left\_on</td>
      <td>Kairiojo DataFrame stulpelis (-iai) arba indeksų lygis (-iai), kuris (-ie) turėtų būti naudojamas (-i) kaip raktas (-ai)</td>
      <td></td>
    </tr>
    <tr>
      <td>right\_on</td>
      <td>Dešiniojo DataFrame stulpelis (-iai) arba indeksų lygis (-iai), kuris (-ie) turėtų būti naudojamas (-i) kaip raktas (-ai)</td>
      <td></td>
    </tr>
    <tr>
      <td>left\_index</td>
      <td>Jei `True`, kairiojo DataFrame indeksas naudojamas kaip raktas</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>right\_index</td>
      <td>Jei `True`, kaip raktas naudojamas dešiniojo DataFrame indeksas.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>sort</td>
      <td>Jei `True`, gautų DataFrame raktų sąrašas surūšiuojamas leksikografine tvarka.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>suffixes</td>
      <td>Priesagos, naudojamos atskirti stulpelius su tuo pačiu pavadinimu.</td>
      <td>`("_x", "_y")`</td>
    </tr>
    <tr>
      <td>kopija</td>
      <td>Jei `False`, kopijavimas išvengiamas</td>
      <td>`True`</td>
    </tr>
  </tbody>
</table>

## Kaip naudoti pandas `merge()`

Toliau pateikiami keletas pavyzdžių, kurie padės suprasti, kaip efektyviai naudoti pandas `merge()`.

### `INNER JOIN`

INNER JOIN sujungia du pandos DataFrames ir **grąžina tik tas eilutes, kurių raktų poros sutampa abiejuose DataFrames**. Norėdami geriau suprasti, kaip tai veikia, sukursime du DataFrames:

```python
import pandas as pd
# Sample DataFrames
df1 = pd.DataFrame({
    'Key': ['A', 'B', 'C'],
    'Value1': [1, 2, 3]
})
df2 = pd.DataFrame({
    'Key': ['B', 'C', 'D'],
    'Value2': [4, 5, 6]
})
print(df1)
print(df2)
```

Dvi gautos duomenų lentelės atrodo taip:

```none
Key    Value1
0     A            1
1     B            2
2     C            3
    Key    Value2
0     B            4
1     C            5
2     D            6
```

Dabar galime atlikti `INNER JOIN` naudodami `merge()` funkciją:

```python
# INNER JOIN
result = pd.merge(df1, df2, how='inner', on='Key')
print(result)
```

Rezultatas rodo, kad į DataFrame įtrauktos tik eilutės, turinčios raktus B ir C. Taip yra todėl, kad šie du raktai yra **abiejuose pradiniuose DataFrame**.

```none
Key    Value1    Value2
0     B            2            4
1     C            3            5
```

### `OUTER JOIN`

An `OUTER JOIN` taip pat sujungia du DataFrames, bet, skirtingai nei `INNER JOIN`, grąžina **visas eilutes** ir **trūkstamas reikšmes** užpildo **`NaN`.**

```python
# OUTER JOIN
result = pd.merge(df1, df2, how='outer', on='Key')
print(result)
```

Toliau pateiktame duomenų rėmelio lentelėje yra **visos abiejų duomenų rėmelių eilutės**. `NaN` naudojamas trūkstamoms reikšmėms rakte A, kuris yra tik `df1`, ir rakte D, kuris yra tik `df2`.

```none
Key    Value1    Value2
0     A        1.0        NaN
1     B        2.0        4.0
2     C        3.0        5.0
3     D        NaN        6.0
```

Note Kiti standartiniai `JOIN` variantai veikia panašiai.

### Naudojant `left_on` ir `right_on`

Kartais dviejų duomenų rėmelių raktų stulpelių pavadinimai skiriasi. Tokiu atveju galite naudoti parametrus `left_on` ir `right_on`, kad nurodytumėte, kuriuos stulpelius naudoti. Pirmiausia sukursime du naujus duomenų rėmelius:

```python
df3 = pd.DataFrame({
    'Key': ['A', 'B', 'C'],
    'Value1': [1, 2, 3]
})
df4 = pd.DataFrame({
    'Key2': ['B', 'C', 'D'],
    'Value2': [4, 5, 6]
})
print(df3)
print(df4)
```

Abu duomenų rėmeliai atrodo taip:

```none
Key    Value1
0     A            1
1     B            2
2     C            3
    Key2    Value2
0        B            4
1        C            5
2        D            6
```

Mes galime naudoti `left_on` ir `right_on` parametrus, kad atliktume `JOIN` operaciją naudodami skirtingus raktus:

```python
# Join with different key column names
result = pd.merge(df3, df4, how='inner', left_on='Key', right_on='Key2')
print(result)
```

Aiškiai naudojant `left_on='Key'` ir `right_on='Key2'`, atitinkami raktiniai stulpeliai naudojami sujungimui.

```none
Key    Value1 Key2    Value2
0     B            2        B            4
1     C            3        C            5
```

### Indeksų naudojimas kaip raktų

Taip pat galite naudoti **DataFrames indeksus kaip raktus**, nustatydami `left_index` ir `right_index` parametrus į `True`. Pirmiausia sukursime du naujus DataFrames su indeksais:

```python
df5 = pd.DataFrame({
    'Value1': [1, 2, 3]
}, index=['A', 'B', 'C'])
df6 = pd.DataFrame({
    'Value2': [4, 5, 6]
}, index=['B', 'C', 'D'])
print(df5)
print(df6)
```

Čia yra duomenų rėmeliai:

```none
Value1
A        1
B        2
C        3
    Value2
B        4
C        5
D        6
```

Dabar galime atlikti `JOIN` operaciją naudodami indeksus:

```python
# JOIN with indices
result = pd.merge(df5, df6, how='inner', left_index=True, right_index=True)
print(result)
```

Rezultatas yra `JOIN`, kuris naudoja indeksus iš DataFrames:

```none
Value1  Value2
B        2        4
C        3        5
```


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