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:
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)pythonKokie parametrai gali būti naudojami su pandas merge?
merge() priimtini įvairūs parametrai leidžia ne tik nurodyti, kuriuos pandas DataFrames derinti, bet ir kokį jungimo tipą naudoti, taip pat kitus detales.
| Parametras | Aprašymas | Numatytasis vertė |
|---|---|---|
| kairė | Pirmasis sujungtinas duomenų rėmelis | |
| dešinė | Antrasis sujungtinas duomenų rėmelis | |
| kaip | Atliktino sujungimo operacijos tipas (inner, outer, left, right)
|
inner
|
| į | Stulpeliai 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 naudojamas (-i) kaip raktas (-ai) | |
| right_on | Dešiniojo DataFrame stulpelis (-iai) arba indeksų lygis (-iai), kuris (-ie) turėtų būti naudojamas (-i) kaip raktas (-ai) | |
| left_index | Jei True, kairiojo DataFrame indeksas naudojamas kaip raktas
|
False
|
| right_index | Jei True, kaip raktas naudojamas dešiniojo DataFrame indeksas.
|
False
|
| sort | Jei True, gautų DataFrame raktų sąrašas surūšiuojamas leksikografine tvarka.
|
False
|
| suffixes | Priesagos, naudojamos atskirti stulpelius su tuo pačiu pavadinimu. | ("_x", "_y")
|
| kopija | Jei False, kopijavimas išvengiamas
|
True
|
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:
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)pythonDvi 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 6Dabar galime atlikti INNER JOIN naudodami merge() funkciją:
# INNER JOIN
result = pd.merge(df1, df2, how='inner', on='Key')
print(result)pythonRezultatas 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.
Key Value1 Value2
0 B 2 4
1 C 3 5OUTER 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.
# OUTER JOIN
result = pd.merge(df1, df2, how='outer', on='Key')
print(result)pythonToliau 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.
Key Value1 Value2
0 A 1.0 NaN
1 B 2.0 4.0
2 C 3.0 5.0
3 D NaN 6.0Kiti 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:
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)pythonAbu 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 6Mes galime naudoti left_on ir right_on parametrus, kad atliktume JOIN operaciją naudodami skirtingus raktus:
# Join with different key column names
result = pd.merge(df3, df4, how='inner', left_on='Key', right_on='Key2')
print(result)pythonAiškiai naudojant left_on='Key' ir right_on='Key2', atitinkami raktiniai stulpeliai naudojami sujungimui.
Key Value1 Key2 Value2
0 B 2 B 4
1 C 3 C 5Indeksų 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:
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 6Dabar galime atlikti JOIN operaciją naudodami indeksus:
# JOIN with indices
result = pd.merge(df5, df6, how='inner', left_index=True, right_index=True)
print(result)pythonRezultatas yra JOIN, kuris naudoja indeksus iš DataFrames:
Value1 Value2
B 2 4
C 3 5