Naudodami pandas funkciją DataFrame.merge(), galite sujungti Da­taF­ra­mes naudodami raktus. Tai leidžia efek­ty­viai sujungti duomenis iš įvairių šaltinių, todėl galite atlikti iš­sa­mes­nes analizes.

Kokia yra pandas merge() sintaksė?

Python pandas DataFrame merge() metodas gali priimti įvairius pa­ra­met­rus, lei­džian­čius prog­ra­muo­to­jams nurodyti, kaip turėtų būti su­jun­gia­mi Da­taF­ra­mes. Bendroji merge() funkcijos sintaksė yra tokia:

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)
python

Kokie pa­ra­met­rai gali būti naudojami su pandas merge?

merge() priimtini įvairūs pa­ra­met­rai leidžia ne tik nurodyti, kuriuos pandas Da­taF­ra­mes derinti, bet ir kokį jungimo tipą naudoti, taip pat kitus detales.

Pa­ra­met­ras Aprašymas Nu­ma­ty­ta­sis vertė
kairė Pirmasis su­jung­ti­nas duomenų rėmelis
dešinė Antrasis su­jung­ti­nas duomenų rėmelis
kaip Atliktino sujungimo ope­ra­ci­jos tipas (inner, outer, left, right) inner
į Stul­pe­liai arba indeksų lygiai, kurie bus naudojami kaip raktiniai žodžiai; turi būti abiejuose DataFrame
left_on Kairiojo DataFrame stulpelis (-iai) arba indeksų lygis (-iai), kuris (-ie) turėtų būti nau­do­ja­mas (-i) kaip raktas (-ai)
right_on Dešiniojo DataFrame stulpelis (-iai) arba indeksų lygis (-iai), kuris (-ie) turėtų būti nau­do­ja­mas (-i) kaip raktas (-ai)
left_index Jei True, kairiojo DataFrame indeksas nau­do­ja­mas kaip raktas False
right_index Jei True, kaip raktas nau­do­ja­mas dešiniojo DataFrame indeksas. False
sort Jei True, gautų DataFrame raktų sąrašas su­rū­šiuo­ja­mas lek­si­ko­gra­fi­ne tvarka. False
suffixes Priesagos, nau­do­ja­mos atskirti stul­pe­lius su tuo pačiu pa­va­di­ni­mu. ("_x", "_y")
kopija Jei False, ko­pi­ja­vi­mas iš­ven­gia­mas True

Kaip naudoti pandas merge()

Toliau pa­tei­kia­mi keletas pavyzdžių, kurie padės suprasti, kaip efek­ty­viai naudoti pandas merge().

INNER JOIN

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

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)
python

Dvi gautos duomenų lentelės atrodo taip:

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ą:

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

Re­zul­ta­tas rodo, kad į DataFrame įtrauktos tik eilutės, turinčios raktus B ir C. Taip yra todėl, kad šie du raktai yra abiejuose pra­di­niuo­se DataFrame.

Key    Value1    Value2
0     B            2            4
1     C            3            5

OUTER JOIN

An OUTER JOIN taip pat sujungia du Da­taF­ra­mes, bet, skir­tin­gai nei INNER JOIN, grąžina visas eilutes ir trūks­ta­mas reikšmes užpildo NaN.

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

Toliau pa­teik­ta­me duomenų rėmelio lentelėje yra visos abiejų duomenų rėmelių eilutės. NaN nau­do­ja­mas trūks­ta­moms reikšmėms rakte A, kuris yra tik df1, ir rakte D, kuris yra tik df2.

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 stan­dar­ti­niai JOIN variantai veikia panašiai.

Naudojant left_on ir right_on

Kartais dviejų duomenų rėmelių raktų stulpelių pa­va­di­ni­mai skiriasi. Tokiu atveju galite naudoti pa­ra­met­rus left_on ir right_on, kad nu­ro­dy­tu­mė­te, kuriuos stul­pe­lius naudoti. Pir­miau­sia sukursime du naujus duomenų rėmelius:

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)
python

Abu duomenų rėmeliai atrodo taip:

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 pa­ra­met­rus, kad atliktume JOIN operaciją naudodami skir­tin­gus raktus:

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

Aiškiai naudojant left_on='Key' ir right_on='Key2', ati­tin­ka­mi raktiniai stul­pe­liai naudojami su­jun­gi­mui.

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

Indeksų nau­do­ji­mas kaip raktų

Taip pat galite naudoti Da­taF­ra­mes indeksus kaip raktus, nu­sta­ty­da­mi left_index ir right_index pa­ra­met­rus į True. Pir­miau­sia sukursime du naujus Da­taF­ra­mes su indeksais:

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)
python

Čia yra duomenų rėmeliai:

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

Dabar galime atlikti JOIN operaciją naudodami indeksus:

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

Re­zul­ta­tas yra JOIN, kuris naudoja indeksus iš Da­taF­ra­mes:

Value1  Value2
B        2        4
C        3        5
Go to Main Menu