TL;DR
pandas concat menyatukan beberapa DataFrame dengan menumpuknya, ke bawah (axis=0) atau ke samping (axis=1). Sintaksnya pd.concat([df1, df2], ignore_index=True). Beda dari merge, concat nggak nyocokin kolom kunci, dia cuma numpuk. Pakai concat buat gabungin file penjualan beberapa bulan jadi satu.
pandas concat itu cara numpuk beberapa DataFrame jadi satu, entah ke bawah atau ke samping.
Punya file penjualan Januari, Februari, dan Maret yang strukturnya sama? concat nyatuin ketiganya jadi satu DataFrame panjang dalam satu baris kode. Nggak perlu copy paste manual.
Di artikel ini kamu bakal belajar cara numpuk ke bawah, numpuk ke samping, ngatur ulang index, dan bedanya concat sama merge biar kamu nggak salah pilih.
pandas concat adalah fungsi buat nyatuin beberapa DataFrame dengan cara numpuk. Kamu kasih daftar DataFrame, dan pandas nyambungin semuanya jadi satu. Arah numpuknya diatur lewat parameter axis: ke bawah buat nambah baris, atau ke samping buat nambah kolom.
Sintaks dasarnya:
import pandas as pd
hasil = pd.concat([df1, df2, df3], ignore_index=True)Bagian pentingnya:
Beda sama merge yang nyocokin kolom kunci, concat cuma numpuk apa adanya. Kalau kamu butuh gabung berdasarkan ID yang cocok, pakai pandas merge, bukan concat.
Buat numpuk DataFrame ke bawah, pakai axis=0, yang juga default-nya. pandas nyambungin baris dari tiap DataFrame secara berurutan. Ini kepakai buat gabungin data periode yang beda dengan kolom yang sama.
jan = pd.read_csv("penjualan_jan.csv")
feb = pd.read_csv("penjualan_feb.csv")
mar = pd.read_csv("penjualan_mar.csv")
q1 = pd.concat([jan, feb, mar], ignore_index=True)Hasilnya satu DataFrame berisi semua baris dari tiga bulan. Parameter ignore_index=True penting di sini. Tanpa itu, index dari tiap file bakal keikut, jadi kamu punya angka index yang berulang, misal 0, 1, 2, 0, 1, 2.
pandas nyocokin kolom berdasarkan namanya, bukan urutannya. Jadi kalau file Februari kolomnya beda urutan, concat tetap naruh nilai di kolom yang benar.
Kalau ada kolom yang cuma muncul di sebagian DataFrame, concat tetap jalan tapi ngisi NaN di baris yang nggak punya kolom itu. Ini perilaku default yang disebut join luar.
hasil = pd.concat([df1, df2], ignore_index=True)
# kolom yang cuma ada di df2 diisi NaN untuk baris df1Kalau kamu cuma mau simpan kolom yang ada di semua DataFrame, pakai join="inner":
hasil = pd.concat([df1, df2], join="inner", ignore_index=True)Dengan inner, kolom yang nggak ada di salah satu DataFrame bakal dibuang. Pilih outer kalau kamu mau semua kolom, inner kalau kamu mau yang bersih dan lengkap aja.
Buat numpuk ke samping, pakai axis=1. pandas nempelin kolom dari DataFrame kedua ke kanan DataFrame pertama, dicocokin berdasarkan index barisnya.
hasil = pd.concat([df_kiri, df_kanan], axis=1)Hati-hati di sini. concat axis=1 nyocokin baris pakai index, bukan pakai kolom kunci. Kalau index dua DataFrame nggak sejajar, kamu bakal dapat NaN atau baris yang salah pasang. Buat nyambungin berdasarkan nilai kunci, merge lebih aman.
Aturan praktisnya: pakai concat axis=1 cuma kalau kamu yakin dua DataFrame punya index yang sama dan urutan baris yang sama persis. Kalau ragu, pakai merge.
Toko_berkah simpan penjualan dalam file terpisah per bulan. Buat laporan kuartal, aku harus gabungin 3 file: Januari 4.100 baris, Februari 3.850 baris, Maret 4.320 baris.
files = ["jan.csv", "feb.csv", "mar.csv"]
dfs = [pd.read_csv(f) for f in files]
q1 = pd.concat(dfs, ignore_index=True)
print(len(q1)) # 12.270 barisTotal 12.270 baris kegabung dalam satu baris kode. Tapi ada jebakan yang aku temuin: 340 baris ternyata duplikat, transaksi akhir Januari kecatat juga di awal file Februari.
Setelah aku cek pakai q1.duplicated().sum(), ketemu 340 baris ganda atau 2,8% dari total. Kalau nggak dibuang, revenue kuartal kehitung lebih Rp 4,1 juta. Aku bersihin pakai q1 = q1.drop_duplicates() sebelum lanjut analisa.
Pelajaran: concat itu cepat, tapi dia numpuk apa adanya tanpa ngecek duplikat. Selalu cek baris ganda setelah gabung file yang periodenya bersinggungan. Buat alur bersih data lengkapnya, cek panduan pengolahan data.
concat numpuk DataFrame, entah ke bawah atau ke samping, tanpa nyocokin nilai kunci. merge nyambungin dua DataFrame berdasarkan nilai di kolom kunci yang cocok, mirip JOIN di SQL. Pakai concat kalau kamu mau nyatuin data yang strukturnya sama, misal file penjualan beberapa bulan. Pakai merge kalau kamu mau nempelin informasi dari tabel lain berdasarkan ID, misal nambahin nama produk ke tabel transaksi.
Karena tiap DataFrame bawa index-nya sendiri, dan concat default-nya nyimpen index itu apa adanya. Jadi kamu dapat angka index yang berulang dari tiap sumber. Solusinya, tambahin ignore_index=True waktu concat, biar pandas nomorin ulang dari 0 sampai baris terakhir. Kalau kamu udah terlanjur concat tanpa itu, jalanin df.reset_index(drop=True) buat rapiin index-nya.
Bisa, dan ini justru kekuatannya. Kamu tinggal taruh semua DataFrame dalam satu daftar, misal pd.concat([df1, df2, df3, df4]). Cara yang lebih rapi buat banyak file, baca semua file pakai list comprehension jadi daftar DataFrame, lalu concat sekaligus. Ini jauh lebih efisien daripada nyambungin dua-dua secara manual dan lebih gampang dibaca.
Bisa. concat nyocokin kolom berdasarkan namanya, bukan posisinya. Jadi kalau file Februari punya kolom dengan urutan berbeda dari Januari, concat tetap naruh tiap nilai di kolom yang benar. Yang penting nama kolomnya sama persis, termasuk huruf besar kecil dan spasi. Kalau nama kolom beda tipis, misal Total dan total, pandas nganggepnya kolom berbeda dan bikin dua kolom terpisah dengan banyak NaN.
Pakai outer, yang jadi default, kalau kamu mau simpan semua kolom dari semua DataFrame. Kolom yang nggak ada di salah satu DataFrame bakal diisi NaN. Pakai inner kalau kamu cuma mau kolom yang muncul di semua DataFrame, sehingga hasilnya bersih tanpa NaN. Buat gabung file bulanan yang strukturnya konsisten, outer dan inner ngasih hasil sama. Bedanya baru kerasa waktu ada kolom yang cuma ada di sebagian file.
Yang perlu kamu inget: concat numpuk DataFrame, axis=0 ke bawah dan axis=1 ke samping. Pakai ignore_index buat rapiin nomor baris, cek duplikat setelah gabung, dan pilih merge kalau kamu butuh nyocokin kolom kunci.
Sekarang coba gabung file data kamu sendiri. Mau latihan konsep gabung data lewat SQL dulu? Cek NgulikSQL buat praktek dengan dataset Indonesia di browser.
Lanjut baca cara pandas merge gabung DataFrame, atau lihat dokumentasi resmi pandas.concat buat semua parameternya.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Nama toko ketik campur huruf besar-kecil, spasi nyasar di ujung, atau kode produk nempel jadi satu. Accessor .str di pandas ngerapiin semua itu tanpa loop.
Model machine learning cuma ngerti angka, bukan teks kayak merah atau biru. get_dummies ngubah kolom kategori jadi kolom 0/1 dalam satu baris kode.
Cara pakai pandas crosstab buat bikin tabel silang yang menghitung frekuensi antar dua kategori. Contoh analisis kategori produk per kota UMKM.