Garfield
YZF Admin
İndeksleri nasıl kullanacağınız, birleştirme sonrasında satır kimliklerini korumak mı yoksa yeni ve temiz bir sıra oluşturmak mı istediğinize bağlıdır. Dikey birleştirmede varsayılan olarak eski indeks değerleri korunur; sonuçta aynı indeks numaraları tekrarlanabilir. Genellikle satırları art arda ekliyorsanız
İki tabloyu satır satır birleştirirken
Çıktıda indeks değerleri
Yeni tabloda sıradan ve benzersiz bir sıra istiyorsanız
Bu durumda beklenen indeks
Böylece yeni indeks satır sırasını gösterirken
Birleştirme kararını indeksin veri içindeki anlamına göre verin. İndeks yalnızca geçici satır numarasıysa yeni indeks oluşturmak daha temizdir. İndeks müşteri numarası, tarih veya başka bir kimlik taşıyorsa onu korumak ya da açık bir sütuna dönüştürmek gerekir.
Tabloları yatay birleştirirken davranış farklıdır.
Sonuçta indeks sırası
İki tablonun satırlarını yalnızca mevcut sıralarına göre yan yana koymak istiyorsanız indeksleri önce sıfırlayın:
Bu yaklaşımda her iki tablo
İşlemden sonra indeksin beklediğiniz biçimde olup olmadığını açıkça kontrol edin:
ignore_index=True kullanarak yeni bir 0, 1, 2, ... indeksi oluşturabilirsiniz. Yatay birleştirmede ise indeksler eşleştirme anahtarı gibi davranır; bu nedenle indekslerin anlamlı ve uyumlu olması gerekir.Dikey birleştirmede indeksleri yönetme
İki tabloyu satır satır birleştirirken
axis=0 varsayılandır. Aşağıdaki varsayımsal örnekte indeksler korunur:
Python:
import pandas as pd
tablo1 = pd.DataFrame(
{"ad": ["Ali", "Ayşe"], "puan": [80, 90]},
index=[10, 11]
)
tablo2 = pd.DataFrame(
{"ad": ["Mehmet", "Zeynep"], "puan": [75, 95]},
index=[10, 11]
)
sonuc = pd.concat([tablo1, tablo2])
print(sonuc)
Çıktıda indeks değerleri
10, 11, 10, 11 olur. Bu durum verilerin kaybolduğu anlamına gelmez; ancak indeks artık her satırı tek başına ayırt eden benzersiz bir değer değildir. İndeksi yalnızca eski tabloların içindeki konumu göstermek için kullanıyorsanız bu tercih edilebilir.Yeni tabloda sıradan ve benzersiz bir sıra istiyorsanız
ignore_index=True ekleyin:
Python:
sonuc = pd.concat(
[tablo1, tablo2],
ignore_index=True
)
print(sonuc)
Bu durumda beklenen indeks
0, 1, 2, 3 olur. Eski indeks değerleri atılır; fakat indeks dışındaki sütun verileri korunur. Bu seçenek eski indeksi ayrı bir bilgi olarak saklamaz. Eski indeks önemliyse birleştirmeden önce onu sütuna dönüştürün:
Python:
sonuc = pd.concat(
[tablo1.reset_index(names="eski_indeks"),
tablo2.reset_index(names="eski_indeks")],
ignore_index=True
)
print(sonuc)
Böylece yeni indeks satır sırasını gösterirken
eski_indeks sütunu kaynak tablodaki indeks değerini korur.Hangi seçenek ne zaman kullanılmalı?
Birleştirme kararını indeksin veri içindeki anlamına göre verin. İndeks yalnızca geçici satır numarasıysa yeni indeks oluşturmak daha temizdir. İndeks müşteri numarası, tarih veya başka bir kimlik taşıyorsa onu korumak ya da açık bir sütuna dönüştürmek gerekir.
| Durum | Önerilen kullanım | Sonuç |
|---|---|---|
| Tablolar satır satır ekleniyor ve eski indeks gereksiz | ignore_index=True | Yeni sıra indeksi oluşur |
| Eski indeks anlamlı bir kimlik taşıyor | Varsayılan birleştirme veya indeksi önce sütuna dönüştürme | Kimlik korunur |
| İndekslerin benzersiz olması gerekiyor | Birleştirme sonrası index.is_unique ile kontrol | Tekrarlı indeks fark edilir |
| Tablolar ortak indeks üzerinden yan yana getiriliyor | axis=1 ve uyumlu indeksler | Satırlar indekslere göre hizalanır |
axis=1 kullanıldığında sütunlar yan yana eklenir ve satırlar indeks değerlerine göre hizalanır:
Python:
sol = pd.DataFrame({"ad": ["Ali", "Ayşe"]}, index=[1, 2])
sag = pd.DataFrame({"puan": [80, 90]}, index=[2, 1])
sonuc = pd.concat([sol, sag], axis=1)
print(sonuc)
Sonuçta indeks sırası
1, 2 olur; puan değerleri de aynı indeks değerine sahip satıra yerleşir. Yani Ali için indeks 1 olduğundan puanı 90 ile eşleşir. Bu işlem satırların mevcut fiziksel sırasına göre değil, indeks etiketlerine göre hizalama yapar.Yatay birleştirmede indeks sırasını sabitleme
İki tablonun satırlarını yalnızca mevcut sıralarına göre yan yana koymak istiyorsanız indeksleri önce sıfırlayın:
Python:
sonuc = pd.concat(
[sol.reset_index(drop=True),
sag.reset_index(drop=True)],
axis=1
)
print(sonuc)
Bu yaklaşımda her iki tablo
0, 1, ... sırasına getirilir. Ancak tabloların satır sıralarının gerçekten aynı kayıtları temsil ettiğinden emin olmalısınız. Aksi durumda teknik olarak çalışan fakat yanlış kişiye veya kayda ait değerleri yan yana getiren bir sonuç oluşabilir.Birleştirme sonrasında kontrol
İşlemden sonra indeksin beklediğiniz biçimde olup olmadığını açıkça kontrol edin:
Python:
print(sonuc.index)
print("Benzersiz mi:", sonuc.index.is_unique)
print("Sıralı mı:", sonuc.index.is_monotonic_increasing)
is_unique değerinin False olması tek başına hata değildir; yalnızca aynı indeks etiketinin birden fazla satırda bulunduğunu gösterir. İndeksin benzersiz olması gerekiyorsa reset_index(drop=True) ile yeni sıra oluşturabilir veya anlamlı kimlik sütununu kullanarak veriyi yeniden düzenleyebilirsiniz. İndeksin veri kimliği olarak kullanılacağı durumlarda, yalnızca satır numarası üretmek yerine kimlik sütunlarının gerçekten benzersiz olup olmadığını ayrıca denetleyin.