0Pricing
Pandas & NumPy Academy · Pelajaran

pd.concat untuk Menumpuk DataFrames

Tumpuk DataFrames secara vertikal atau horizontal dengan pd.concat, selaraskan berdasarkan indeks atau kolom, dan tangani indeks duplikat.

pd.concat untuk Menumpuk DataFrames adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Mengapa Menggabungkan DataFrame?

Dalam proyek nyata, data jarang tersedia dalam satu file. Anda mungkin memiliki file penjualan bulanan, hasil ekspor survei per wilayah, atau hasil kueri basis data yang terbagi dalam beberapa kueri. Penggabungan menumpuk DataFrame terpisah tersebut menjadi satu tabel gabungan. Pandas menyediakan pd.concat() untuk tujuan ini, baik untuk penumpukan vertikal (berdasarkan baris) maupun horizontal (berdasarkan kolom).

Penggabungan Vertikal Dasar

Penggunaan pd.concat() yang paling umum adalah menumpuk DataFrame secara vertikal (menambahkan lebih banyak baris). Teruskan daftar DataFrame, dan fungsi tersebut akan menambahkan semuanya satu di bawah yang lain. Kedua DataFrame harus memiliki kolom yang kompatibel agar hasilnya rapi. Pandas secara otomatis menyelaraskan berdasarkan nama kolom dan mengisi kolom yang hilang dengan NaN.

import pandas as pd

jan = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
feb = pd.DataFrame({'product': ['A', 'C'], 'sales': [150, 120]})

combined = pd.concat([jan, feb])
print(combined)
#   product  sales
# 0       A    100
# 1       B    200
# 0       A    150
# 1       C    120

Mengatur Ulang Indeks Setelah Concat

Perhatikan bahwa pd.concat() mempertahankan indeks asli dari setiap DataFrame, yang dapat menghasilkan nilai indeks duplikat (seperti contoh di atas dengan dua baris pada indeks 0 dan indeks 1). Teruskan ignore_index=True untuk membuat indeks bilangan bulat berurutan yang baru pada hasil gabungan, yang hampir selalu merupakan hal yang Anda inginkan.

combined = pd.concat([jan, feb], ignore_index=True)
print(combined)
#   product  sales
# 0       A    100
# 1       B    200
# 2       A    150
# 3       C    120

print(combined.index)
# RangeIndex(start=0, stop=4, step=1)

Melacak Sumber dengan keys

Saat menggabungkan data dari beberapa sumber, Anda mungkin ingin mengetahui dari DataFrame asli mana setiap baris berasal. Teruskan parameter keys dengan daftar label. Pandas membuat MultiIndex dengan tingkat terluar yang mengidentifikasi sumber. Setelah itu, Anda dapat menggunakan .loc['label'] untuk mengakses baris dari sumber tertentu.

combined = pd.concat([jan, feb], keys=['January', 'February'])
print(combined)
#                product  sales
# January   0         A    100
#           1         B    200
# February  0         A    150
#           1         C    120

# Access only February rows
print(combined.loc['February'])

Penggabungan Horizontal dengan axis=1

Teruskan axis=1 untuk menggabungkan DataFrame secara berdampingan (menambahkan lebih banyak kolom). Pandas menyelaraskan berdasarkan indeks baris, sehingga kedua DataFrame sebaiknya memiliki indeks yang sama agar hasilnya rapi. Jika indeks berbeda, baris yang tidak cocok akan diisi dengan NaN. Ini berguna untuk menggabungkan fitur yang dihitung dari kumpulan data yang sama dalam langkah terpisah.

names = pd.DataFrame({'name': ['Alice', 'Bob', 'Carol']}, index=[1, 2, 3])
scores = pd.DataFrame({'score': [95, 88, 72]}, index=[1, 2, 3])

combined = pd.concat([names, scores], axis=1)
print(combined)
#     name  score
# 1  Alice     95
# 2    Bob     88
# 3  Carol     72

Menangani Kolom yang Tidak Cocok

Jika DataFrame yang digabungkan memiliki kolom yang berbeda, Pandas mempertahankan semua kolom dan mengisi nilai yang hilang dengan NaN. Ini adalah perilaku default join='outer'. Jika Anda hanya ingin mempertahankan kolom yang muncul di semua DataFrame, teruskan join='inner', yang menghapus kolom apa pun yang tidak ada di setiap sumber.

df1 = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
df2 = pd.DataFrame({'b': [5, 6], 'c': [7, 8]})

# Outer join (default): keeps all columns
print(pd.concat([df1, df2], ignore_index=True))
#      a  b    c
# 0  1.0  3  NaN
# 1  2.0  4  NaN
# 2  NaN  5  7.0
# 3  NaN  6  8.0

# Inner join: keeps only shared columns
print(pd.concat([df1, df2], join='inner', ignore_index=True))
#    b
# 0  3
# 1  4
# 2  5
# 3  6

Menggabungkan Banyak File dalam Perulangan

Pola yang umum saat memuat banyak file adalah mengumpulkan semua DataFrame dalam sebuah daftar, lalu memanggil pd.concat() sekali di akhir. Hindari melakukan penggabungan di dalam perulangan (misalnya, df = pd.concat([df, new_chunk])) karena hal ini membuat salinan DataFrame baru pada setiap iterasi, sehingga menyebabkan kompleksitas waktu kuadratik untuk kumpulan yang besar.

import glob

# Efficient: collect first, concat once
files = glob.glob('data/sales_*.csv')
frames = [pd.read_csv(f) for f in files]
combined = pd.concat(frames, ignore_index=True)

# Inefficient (avoid):
# result = pd.DataFrame()
# for f in files:
#     result = pd.concat([result, pd.read_csv(f)])  # slow!

Menggabungkan Series

pd.concat() dapat digunakan dengan Series maupun DataFrame. Menggabungkan daftar Series secara vertikal menghasilkan Series yang lebih panjang. Menggabungkannya dengan axis=1 menghasilkan DataFrame, dengan setiap Series menjadi sebuah kolom. Series diselaraskan berdasarkan indeksnya, sehingga label indeks harus cocok agar penggabungan horizontal menghasilkan keluaran yang rapi.

s1 = pd.Series([1, 2, 3], name='x')
s2 = pd.Series([4, 5, 6], name='y')

# Vertical: one long Series
print(pd.concat([s1, s2]))
# 0    1
# 1    2
# ...

# Horizontal: a DataFrame with two columns
print(pd.concat([s1, s2], axis=1))
#    x  y
# 0  1  4
# 1  2  5
# 2  3  6

Memverifikasi Hasil Penggabungan

Setelah melakukan penggabungan, selalu verifikasi bahwa hasilnya memiliki bentuk yang diharapkan dan tidak mengandung nilai NaN yang tidak terduga. Pola pemeriksaan kewajaran yang cepat: bandingkan jumlah baris gabungan dengan jumlah seluruh baris individual, lalu panggil isna().sum() untuk menemukan nilai yang hilang dan tidak sengaja muncul akibat ketidakselarasan kolom. Pemeriksaan ini mencegah masalah kualitas data yang tidak terlihat menyebar ke dalam analisis Anda.

combined = pd.concat([jan, feb], ignore_index=True)

# Sanity checks
assert len(combined) == len(jan) + len(feb), 'Row count mismatch'
print('Missing values per column:')
print(combined.isna().sum())
print('Shape:', combined.shape)

concat vs append (tidak digunakan lagi)

Kode Pandas yang lebih lama mungkin menggunakan df.append(other), yang merupakan pembungkus praktis untuk pd.concat(). Metode ini tidak lagi digunakan mulai Pandas 1.4 dan dihapus pada Pandas 2.0. Selalu gunakan pd.concat([df, other], ignore_index=True) dalam kode modern. Perilakunya sama, tetapi pd.concat lebih jelas dan mendukung penggabungan lebih dari dua DataFrame sekaligus.

# Old (removed in Pandas 2.0):
# combined = jan.append(feb, ignore_index=True)

# Modern equivalent:
combined = pd.concat([jan, feb], ignore_index=True)
print(combined)

Contoh Praktis: Laporan Penjualan Tahunan

Berikut pola yang realistis: memuat DataFrame bulanan, menambahkan label sumber, menggabungkannya, lalu menghitung ringkasan setahun penuh. Parameter keys memudahkan Anda melacak setiap baris kembali ke bulannya, sedangkan ignore_index=True yang digabungkan dengan kolom bulan menghasilkan DataFrame datar yang rapi untuk analisis berdasarkan grup.

months = ['jan', 'feb', 'mar']
frames = []
for m in months:
    df = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
    df['month'] = m
    frames.append(df)

yearly = pd.concat(frames, ignore_index=True)
print(yearly.groupby('month')['sales'].sum())

Pemeriksaan Singkat

Uji pemahaman Anda tentang pd.concat untuk menumpuk DataFrame dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda telah mempelajari: cara menumpuk DataFrames secara vertikal dengan pd.concat() dan ignore_index=True, cara melacak sumber menggunakan parameter keys, serta cara join='inner' vs 'outer' mengatur penanganan kolom saat skema berbeda. Selanjutnya, kita akan mempelajari pd.merge() untuk inner dan outer join bergaya SQL pada kolom kunci yang sama.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “pd.concat untuk Menumpuk DataFrames” gratis?

Ya — teks lengkap “pd.concat untuk Menumpuk DataFrames” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “pd.concat untuk Menumpuk DataFrames”?

Tumpuk DataFrames secara vertikal atau horizontal dengan pd.concat, selaraskan berdasarkan indeks atau kolom, dan tangani indeks duplikat. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “pd.concat untuk Menumpuk DataFrames” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. pd.concat untuk Menumpuk DataFrames
  2. pd.merge: Gabungan Dalam dan Luar
  3. Gabungan Kiri dan Kanan
  4. Menggabungkan Berdasarkan Indeks
← Kembali ke Pandas & NumPy Academy