Kirish

Agar siz python-ga o'tayotgan ko'plab R foydalanuvchilaridan biri bo'lsangiz, R-ning eng sevimli kutubxonalarining qulayligiga qarab o'zingizni topishingiz mumkin. Tashqi tomondan, R ning qulayligi va soddaligidan sakrash bir oz qo'rqinchli ko'rinishi mumkin, chunki python landshafti ko'p bo'lsa-da, ko'pincha ma'lum bir funktsional qism uchun juda ko'p tarjima kabi tuyulishi mumkin. To'g'ridan-to'g'ri tarjimalarni topish har doim ham oson emas.

Buning maqsadi, ish jarayonini python-ga o'tkazishda qaysi usullarga tayanish kerakligi haqida xabardor nuqtai nazarni bo'lishishdir.

Ushbu maqolada biz dplyr-ning barcha turdagi ulanishlarni amalga oshirish uchun qulay usullariga muqobil variantlarni ko'rib chiqamiz.

Ushbu asosiy savollarga javob beradigan boshqa maqolalarni kuzatib boring.

Siz nimani o'rganasiz

Ushbu maqola uchun biz dplyr kutubxonasidagi R ning birlashma funktsiyalari uchun asosiy tarjimalarni ajratamiz.

Ushbu maqolani o'qib, siz quyidagi funktsiyalar uchun asosiy python tarjimalarini o'rganishingiz mumkin:

  • chapga_qo'shilish
  • o'ngga_qo'shilish
  • ichki_qo'shilish
  • tashqi_qo'shilish
  • anti_join
  • semi_join

Umumiy koʻrinishga qoʻshilish

Birlashtirish funktsiyalari umumiy ustunga asoslangan ikki yoki undan ortiq ma'lumotlar ramkalarini birlashtirish uchun ishlatiladi.

Quyida turli xil ta'riflarning tezkor ko'rib chiqilishi keltirilgan

  • left_join: chap jadvaldagi barcha satrlarni va o'ng jadvaldan mos keladigan satrlarni qaytaradi
  • right_join: o'ng jadvaldagi barcha satrlarni va chap jadvaldan mos keladigan satrlarni qaytaradi
  • inner_join: faqat ikkala jadvalda ko'rsatilgan yozuvlarni qaytaradi
  • outer_join: Bu funksiya ikkala jadvaldagi barcha qatorlarni qaytaradi va etishmayotgan qiymatlarni NA bilan toʻldiradi
  • anti_join: Bu funksiya chap jadvaldagi o'ng jadvalda mos kelmaydigan barcha qatorlarni qaytaradi.
  • semi_join: Bu funksiya chap jadvaldagi o'ng jadvalda mos keladigan barcha qatorlarni qaytaradi.

Taqqoslash vaqti

O'tishdan oldin biz ikkita namunaviy ma'lumot ramkasidan foydalanamiz. Men ushbu ikkita namunaviy ma'lumotlar ramkasini yaratish uchun kodni qo'shaman, shunda siz kuzatib borishingiz mumkin:

# libraries
import pandas as pd
# sample df1
df1 = pd.DataFrame({
    'join_column': ['A', 'B', 'C', 'D'],
    'col1': [10, 20, 30, 40],
    'col2': [100, 200, 300, 400]
})
# sample df2
df2 = pd.DataFrame({
    'join_column': ['B', 'D', 'E', 'F'],
    'col3': ['X', 'Y', 'Z', 'W'],
    'col4': ['P', 'Q', 'R', 'S']
})

Bu yo'ldan tashqarida, keling, sho'ng'in qilaylik

Chapga qo'shilish

R

r-da siz dplyr-ning soddaligi va oqimidan bahramand bo'lasiz, siz qiziqtirgan ma'lumotlar ramkangizni, bu holda df1-ni belgilaysiz va umumiy maydonda unga df2 qo'shilasiz.

df3 <- df1 %>%
    left_join(df2, by = "join_column")

Python

Yaxshiyamki, pitonda hamma narsa unchalik farq qilmaydi. Asosiy farq sintaktik, birlash va left_joinga nisbatan, by emas, balki on va hokazo.

Yana bir farq shundaki, biz .merge dan chap dataframe usuli sifatida foydalanishimiz mumkin. Birlashtirishning qiziqarli va qulay jihatlaridan biri qanday parametridir. Bu bizni qiziqtirayotgan qoʻshilish turini aniqlash imkonini beradi. left_join, right_join, inner_joinni eslab qolish unchalik qiyin emas, lekin baʼzida oddiy narsalardan zavqlanishga toʻgʻri keladi.

df3 = df1.merge(df2, on = "join_column", how = "left")

Yana bir eslatma shundaki, siz funktsiya sifatida birlashtirishni ham chaqirishingiz mumkin, bu holda buyruq quyidagicha ko'rinadi:

df3 = pd.merge(df1, df2, on = "join_column", how = "left")

Juda farqli emas, lekin ikkala funktsiya va usul pandalardan ekanligini va ikkalasi ham mavjud ekanligini bilish foydalidir.

Natija:

To'g'ri qo'shilish

O'z-o'zidan tushunarli bo'lsa, bu erda o'zgarib turadigan yagona narsa shundaki, biz to'g'ri ulanishni amalga oshirmoqdamiz, shuningdek, birinchi navbatda qaysi dataframeni almashtirish bilan bir xil narsa.

Biz bu erda misollar bilan tanishamiz.

R

Bu erda o'zgaruvchan yagona narsa funktsiyadir

df3 <- df1 %>%
    right_join(df2, by = "join_column")

Python

df3 = df1.merge(df2, on = "join_column", how = "right")

Natija:

Ichki qo'shilish

To'g'ri ulanishga o'xshab, keyingi bir nechta funktsiyalar juda oddiy, shuning uchun biz tezda bajaramiz.

R

df3 <- df1 %>%
    inner_join(df2, by = "join_column")

Python

df3 = df1.merge(df2, on = "join_column", how = "inner")

Natija:

Tashqi qo'shilish

R

df3 <- df1 %>%
    outer_join(df2, by = "join_column")

Python

df3 = df1.merge(df2, on = "join_column", how = "outer")

Qo'shilishga qarshi

Bu erda Python biroz ko'proq ishtirok etadi, ammo uni himoya qilishda anti-qo'shilishlar eng keng tarqalgan emas.

R

df3 <- df1 %>%
    anti_join(df2, by = "join_column")

Python

df3 = df1.merge(df2["join_column"], on = "join_column", how = "left", indicator=True)
.query('_merge == "left_only"')
.drop('_merge', 1)

Bu erda tushuntirish uchun bir nechta turli qismlar mavjud.

Bizindikator parametrini True ga to‘ldirganimizda, “_merge” nomli yangi ustun qo‘shiladi, chap qo‘shilish holatida “faqat chapdan” yoki “ikkalasida” ham deyiladi. Siz taxmin qilganingizdek, “faqat chap” soʻzi toʻgʻri maʼlumotlar ramkasida mos kelmasligini va “ikkalasi”da esa moslik borligini anglatadi.

Biz Rostni ko'rsatamiz, shunda biz .query dan faqat to'g'ri ma'lumotlar ramkasida topilmagan yozuvlarni xohlashimizni belgilash uchun ishlatishimiz mumkin.

Va nihoyat, biroz tozalash sifatida biz “_merge” ustuninitashlaymiz.

Va men eslatib o'tadigan oxirgi qism, biz to'g'ri ma'lumotlar ramkasini faqat qo'shilish ustuniga o'rnatishimiz kerak. Aks holda, biz barcha null ustunlarni to'g'ri ma'lumotlar ramkasidan ham qo'shamiz. Bu ma'nosiz va anti_join dan an'anaviy foydalanishga qarshi bo'lar edi.

Aytganimdek, ko'p narsa jalb qilingan, ammo kontseptual jihatdan hali ham oddiy.

Natijalar:

Yarim qo'shilish

Eslatib o'tamiz, yarim birlashmalar anti_joinning teskarisidir. Biz faqat o'ng dataframe bilan mos keladigan chap dataframe yozuvlarini qaytaramiz.

R.da hech narsa o'zgarmaydi.

R

df3 <- df1 %>%
    anti_join(df2, by = "join_column")

Python

Yuqorida biz ko'rgan narsaga o'xshash birlashmalarga qarshi; ammo, bu holda biz _merge qayerda "ikkalasiga" teng ekanligini so'raymiz, bu esa mos kelishini talab qiladi.

pd.merge(df1, df2['join_column'], on = "column_name", how = "left", indicator=True)\
.query('_merge == "both"')\
.drop('_merge', 1)

Xulosa:

Biz juda ko'p yerlarni tezda bosib oldik. R-dagi dplyr-ga o'xshash tarzda pandalarning qo'shilish bosqichlari haqida gap ketganda. Biz R-dagi kalit birikma funksiyalari uchun oddiy va samarali python tarjimalarini, xususan, dplyr-ni o'rganib chiqdik.

Xususan, biz quyidagi ulanish turlarini ko'rib chiqdik:

  • chapga_qo'shilish
  • o'ngga_qo'shilish
  • ichki_qo'shilish
  • tashqi_qo'shilish
  • anti_join
  • semi_join

Umid qilamizki, ushbu maqola foydali bo'ladi. Python-da pandalarning birlashtirish funksiyasidan ko'ra qanday muqobil usullardan foydalanishingizni bizga xabar bering.