Idenya
Sebuah dataset biasanya punya lebih banyak kolom dan baris daripada yang dibutuhkan oleh satu pertanyaan. Memilih hanya yang kamu perlukan membuat output mudah dibaca, perhitungan lebih cepat, dan kode lebih jelas tentang apa yang benar-benar dipakainya. Modul ini membahas pemilihan sehari-hari; dua modul berikutnya menambahkan filter berdasarkan kondisi serta alat presisi loc/iloc.
import pandas as pd
sales = pd.read_csv("sales.csv")
Satu kolom: Series
Kurung siku dengan satu nama kolom memberimu kolom itu sebagai Series:
revenue = sales["revenue"]
print(type(revenue).__name__)
print(revenue.head(3))
print(revenue.sum())
Series
0 89000
1 285000
2 960000
Name: revenue, dtype: int64
17502000
Kamu mungkin juga melihat sales.revenue (gaya attribute). Cara itu berfungsi untuk nama sederhana, tapi gagal untuk nama yang mengandung spasi, nama yang bentrok dengan method (kolom bernama count atau size), dan kolom baru. Tetaplah memakai sales["revenue"]: cara ini selalu berhasil.
Beberapa kolom: DataFrame
Sebagian besar laporan butuh beberapa kolom, bukan satu. Misalkan kamu ingin melihat siapa membeli apa dan berapa nilainya: itu kolom customer, product, dan revenue. Berikan list nama kolom di dalam kurung siku, itulah sebabnya kamu melihat kurung siku ganda:
lines = sales[["customer", "product", "revenue"]]
print(type(lines).__name__)
print(lines.head(3))
DataFrame
customer product revenue
0 Kartika Rahma Desk Organizer 89000
1 Citra Dewi Arabica Gayo 250g 285000
2 Eka Putri Pour-over Kettle 960000
Kurung luar untuk memilih; kurung dalam adalah list-nya. Kolom kembali dalam urutan yang kamu tulis, jadi ini juga cara untuk mengurutkan ulang kolom.
df["col"] memberi Series; df[["col"]] (list dengan satu nama) memberi DataFrame dengan satu kolom. Banyak teka-teki "kenapa method ini tidak jalan" ujung-ujungnya soal yang mana yang sedang kamu pegang.
Membuang kolom yang tidak kamu mau
Saat kamu ingin hampir semua kolom, menuliskan semuanya itu membosankan. Kalau kamu hanya ingin membuang beberapa, lebih mudah menyebut apa yang mau dibuang:
slim = sales.drop(columns=["segment", "channel"])
print(slim.shape)
print(sales.shape)
(71, 10)
(71, 12)
.drop() mengembalikan DataFrame baru; sales tidak berubah. Sebagian besar method pandas bekerja seperti ini, sehingga data aslimu tetap aman. Kamu akan bertemu lebih banyak operasi kolom di modul 7.
Baris berdasarkan posisi: slicing
Slicing dengan : di dalam kurung siku memilih baris berdasarkan posisi, persis seperti list:
print(sales[["customer", "product"]][10:13])
customer product
10 Lukman Hakim Throw Pillow
11 Lukman Hakim Robusta Lampung 250g
12 Lukman Hakim Notebook A5 Dotted
Baris 10, 11 dan 12: awal ikut, akhir tidak ikut. .head(n) dan .tail(n) adalah jalan pintas yang mudah dibaca untuk baris pertama dan terakhir.
Aturan kurung siku agak kebanyakan peran: string atau list memilih kolom, slice memilih baris. Itu praktis untuk pekerjaan cepat, tapi itu juga alasan modul-modul berikutnya memperkenalkan .loc dan .iloc, yang selalu eksplisit.
Mengambil satu nilai
Untuk mendapatkan satu nilai, pilih kolomnya, lalu label barisnya:
print(sales["product"][2])
print(sales.loc[2, "product"])
Pour-over Kettle
Pour-over Kettle
Keduanya berfungsi; .loc[row, column] adalah bentuk satu langkah yang lebih bersih, dan itulah yang sebaiknya kamu pakai (modul 6 menjelaskan alasannya).
Memilih kolom berdasarkan tipe atau pola nama
Untuk tabel yang lebar, pilih kolom berdasarkan aturan alih-alih mengetik setiap nama:
numbers = sales.select_dtypes(include="number")
print(list(numbers.columns))
price_cols = [col for col in sales.columns if "price" in col or col == "revenue"]
print(price_cols)
['order_id', 'quantity', 'unit_price', 'revenue']
['unit_price', 'revenue']
select_dtypes memilih kolom berdasarkan tipe ("number", "object", "datetime"), dan list comprehension biasa atas df.columns menangani aturan penamaan apa pun yang bisa kamu tulis dengan Python.
Mengatur kolom untuk laporan
Menggabungkan yang sudah kamu tahu: pilih, urutkan ulang, dan tampilkan baris-baris terpenting.
report_cols = ["order_id", "order_date", "customer", "revenue"]
print(sales[report_cols].head(4).to_string(index=False))
order_id order_date customer revenue
1 2024-01-03 Kartika Rahma 89000
2 2024-01-09 Citra Dewi 285000
3 2024-01-17 Eka Putri 960000
4 2024-01-18 Citra Dewi 75000
.to_string(index=False) mencetak tanpa label baris, praktis untuk output teks yang rapi. Menyimpan daftar kolom di variabel bernama (report_cols) mendokumentasikan isi laporan dan memudahkannya untuk diubah.
Mengapa ini penting untuk kode yang bersih
Pilih sejak awal dan secara eksplisit. Fungsi yang hanya membutuhkan tiga kolom sebaiknya menerima atau membuat frame tiga kolom, supaya pembaca tahu persis data apa yang ia butuhkan, dan perubahan di kolom lain tidak bisa merusaknya. Beri nama daftar kolommu (ID_COLUMNS, report_cols), utamakan df["col"] dibanding akses attribute, dan ingat bahwa method seperti .drop() mengembalikan frame baru alih-alih mengubah yang asli.
Rangkuman
df["col"]→ Series;df[["a", "b"]]→ DataFrame dengan kolom-kolom itu, dalam urutan itu.df.drop(columns=[...])mengembalikan frame baru tanpa kolom-kolom itu.df[10:13]memotong baris berdasarkan posisi;.head()/.tail()adalah jalan pintasnya.df.loc[row, "col"]mengambil satu nilai.select_dtypes(include="number")dan comprehension atasdf.columnsmemilih kolom berdasarkan aturan..to_string(index=False)mencetak tanpa index.