Pembersihan data tidak berhenti pada kolom: baris juga sering perlu dikeluarkan, misalnya transaksi uji yang ikut terimpor, data duplikat, atau baris di luar cakupan laporan. Method drop() yang kita singgung pada Chapter Memilih dan Menghapus Kolom kini kita bahas tuntas. Kita akan menghapus baris berdasarkan label, membandingkan parameter axis dengan columns, dan menangani label yang tidak ada di data.

Menghapus Baris berdasarkan Label #

Kebutuhan pertama adalah mengeluarkan baris P002 dan P004 dari tabel penjualan. Method drop() secara default mengarah ke baris, sehingga penulisannya cukup menyebut label yang ingin dihapus. Skrip berikut menghapus dua baris tersebut, lalu menghapus kolom stok dengan dua gaya penulisan.

python
import pandas as pd

penjualan = pd.DataFrame(
    {
        "produk": ["Kopi Gayo", "Teh Melati", "Gula Aren", "Roti Bakar", "Pisang Goreng"],
        "kasir": ["Budi", "Siti", "Dewi", "Budi", "Dewi"],
        "cabang": ["Bandung", "Jakarta", "Bandung", "Surabaya", "Jakarta"],
        "harga": [18000, 12000, 15000, 20000, 10000],
        "jumlah": [35, 40, 25, 20, 50],
        "stok": [12, 8, 30, 15, 22],
    },
    index=["P001", "P002", "P003", "P004", "P005"],
)

sisa = penjualan.drop(index=["P002", "P004"])
print(sisa)
print()

tanpa_stok = penjualan.drop(columns=["stok"])
lewat_axis = penjualan.drop("stok", axis=1)
print(list(tanpa_stok.columns))
print(list(lewat_axis.columns))
print(list(penjualan.columns))
print()

try:
    penjualan.drop(index=["P999"])
except KeyError as pesan:
    print("KeyError:", pesan)

Output yang Dihasilkan:

text
             produk kasir   cabang  harga  jumlah  stok
P001      Kopi Gayo  Budi  Bandung  18000      35    12
P003      Gula Aren  Dewi  Bandung  15000      25    30
P005  Pisang Goreng  Dewi  Jakarta  10000      50    22

['produk', 'kasir', 'cabang', 'harga', 'jumlah']
['produk', 'kasir', 'cabang', 'harga', 'jumlah']
['produk', 'kasir', 'cabang', 'harga', 'jumlah', 'stok']

KeyError: "['P999'] not found in axis"

Mari kita telaah peran setiap baris kode di atas:

  1. Baris 15 (sisa = penjualan.drop(index=["P002", "P004"])): argumen index menerima list label baris yang dihapus; output pertama hanya memuat P001, P003, dan P005.
  2. Baris 19 (tanpa_stok = penjualan.drop(columns=["stok"])): argumen columns menghapus kolom tanpa perlu menyebut axis.
  3. Baris 20 (lewat_axis = penjualan.drop("stok", axis=1)): gaya penulisan lama yang menyatakan arah penghapusan lewat axis=1; hasilnya sama persis dengan baris 19.
  4. Baris 21-23: tiga cetakan list menunjukkan kedua DataFrame baru memiliki kolom yang sama, sedangkan penjualan asli masih memiliki kolom stok.
  5. Baris 26-29: blok try/except membuktikan label yang tidak ada memunculkan KeyError dengan pesan ['P999'] not found in axis.

Secara default drop() mengarah ke baris (axis=0), sehingga penjualan.drop(["P002", "P004"]) tanpa argumen index memberikan hasil yang sama. Bentuk axis="index" dan axis="columns" juga sah sebagai pengganti angka 0 dan 1. Seluruh pemanggilan drop() mengembalikan DataFrame baru; data asli tetap lengkap sebagaimana terlihat pada cetakan ketiga. Ringkasan operasi dasar termasuk drop() juga tersedia pada halaman Essential basic functionality , sedangkan tanda tangannya terdokumentasi di pandas.DataFrame.drop .

Membandingkan axis dan columns #

Bentuk penulisanArti
drop(index=["P002"])menghapus baris dengan label P002 (arah baris)
drop(["P002"])sama dengan bentuk di atas; axis=0 adalah default
drop(columns=["stok"])menghapus kolom stok
drop("stok", axis=1)sama dengan bentuk di atas; gaya penulisan lama

Kedua gaya menghasilkan DataFrame yang identik, sehingga pilihan menjadi soal keterbacaan. Penulisan columns= dan index= lebih eksplisit karena maksudnya langsung terlihat tanpa perlu mengingat arti angka 0 dan 1. Gaya axis=1 masih banyak dijumpai pada kode dan tutorial lama, sehingga kita perlu mengenalinya dengan baik.

Menangani Label yang Tidak Ada #

Ketika label yang diminta tidak ada, pandas memunculkan KeyError dengan pesan yang menyebut labelnya, sebagaimana output terakhir. Perilaku ketat ini membantu menangkap salah ketik sedini mungkin. Untuk kasus ketika label memang dinamis dan boleh tidak ada, tambahkan errors="ignore" agar label yang tidak dikenal dilewati tanpa galat, misalnya penjualan.drop(index=["P999"], errors="ignore").

Sekarang kita menguasai penghapusan baris dan kolom sekaligus pola penugasannya. Tabel yang sudah bersih masih bisa diatur tampilannya: baris yang paling relevan sebaiknya berada di atas agar pembaca laporan langsung menemukannya. Pengurutan berdasarkan nilai kolom dengan sort_values() kita bahas pada Chapter berikutnya.