Method read_csv() memiliki lebih dari lima puluh parameter, dan mempelajari semuanya sekaligus justru membuat bingung. Dalam pekerjaan nyata, delapan parameter berikut menyelesaikan hampir semua kendala file CSV: pemisah yang bukan koma, file tanpa header, kolom yang hanya sebagian dibutuhkan, tipe data yang salah baca, kode missing yang tidak baku, tanggal berbentuk teks, dan masalah encoding. Chapter ini menyajikan tabel referensi singkat untuk kedelapan parameter tersebut, lalu mendemonstrasikannya dalam dua contoh runnable: membaca file non-baku dan membersihkan tipe data saat membaca.
Delapan Parameter yang Sering Dipakai #
Tabel berikut merangkum parameter read_csv() yang paling sering menyelamatkan pekerjaan:
| Parameter | Fungsi | Contoh |
|---|---|---|
sep | Menentukan karakter pemisah antar kolom | sep=";" |
header | Memilih baris yang dipakai sebagai nama kolom | header=None |
names | Memberi daftar nama kolom sendiri | names=["produk", "harga"] |
usecols | Membaca sebagian kolom saja | usecols=["tanggal", "total"] |
dtype | Memaksa tipe data kolom tertentu | dtype={"total": "Int64"} |
na_values | Menambah teks yang dianggap missing | na_values=["-"] |
parse_dates | Mengubah kolom tanggal menjadi datetime64 | parse_dates=["tanggal"] |
encoding | Menyesuaikan set karakter file | encoding="latin-1" |
Kombinasi header=None dan names selalu dipakai berpasangan: header=None memberi tahu pandas bahwa file tidak punya baris header, lalu names menyediakan nama kolom penggantinya. Sementara itu, dtype dan na_values bekerja di lapisan yang sama — keduanya mengubah isi sel sebelum DataFrame final terbentuk.
Membaca CSV Tanpa Header dan Pemisah Lain #
File hasil ekspor dari sistem Eropa atau perangkat kasir sering memakai titik koma sebagai pemisah dan tidak menyertakan baris header. Bacaan default read_csv() akan salah total: teks Kopi Gayo;85000;12 menjadi satu kolom, dan baris pertama data dinilai sebagai nama kolom. Parameter sep, header, dan names menuntaskan ketiganya dalam satu panggilan, seperti pada skrip berikut.
from io import StringIO
import pandas as pd
teks_stok = """Kopi Gayo;85000;12
Teh Melati;32000;30
Gula Aren;24000;25
"""
df_stok = pd.read_csv(
StringIO(teks_stok),
sep=";",
header=None,
names=["produk", "harga", "stok"],
)
print(df_stok)
print()
print(df_stok.dtypes)Output yang Dihasilkan:
produk harga stok
0 Kopi Gayo 85000 12
1 Teh Melati 32000 30
2 Gula Aren 24000 25
produk str
harga int64
stok int64
dtype: objectBaris 10-15 pada skrip di atas membaca string CSV lewat io.StringIO, memberi tahu pandas bahwa pemisahnya ; (sep=";"), bahwa tidak ada baris header (header=None), dan bahwa nama kolom harus diambil dari daftar yang kita sediakan (names=[...]). Tanpa header=None, pandas akan memakai baris Kopi Gayo;85000;12 sebagai nama kolom dan menyisakan hanya dua baris data.
Membersihkan Tipe Data Saat Membaca #
Kasus kedua adalah file CSV dengan kode missing tidak baku dan tanggal berbentuk teks. Perhatikan nilai - pada kolom transaksi dan total di file latihan berikut: tanpa perlakuan khusus, pandas tidak menganggap - sebagai missing, sehingga kolom total yang berisi campuran angka dan - akan terbaca sebagai kolom teks. Empat parameter bekerja bersama untuk memperbaikinya langsung saat proses baca.
from io import StringIO
import pandas as pd
teks_penjualan = """tanggal,kota,transaksi,total
2026-01-05,Bandung,12,150000
2026-01-06,Jakarta,-,230000
2026-01-07,Bandung,9,-
"""
df_penjualan = pd.read_csv(
StringIO(teks_penjualan),
usecols=["tanggal", "kota", "total"],
dtype={"total": "Int64"},
na_values=["-"],
parse_dates=["tanggal"],
)
print(df_penjualan)
print()
print(df_penjualan.dtypes)Output yang Dihasilkan:
tanggal kota total
0 2026-01-05 Bandung 150000
1 2026-01-06 Jakarta 230000
2 2026-01-07 Bandung <NA>
tanggal datetime64[us]
kota str
total Int64
dtype: objectBaris demi baris, inilah peran tiap parameter:
- Baris 12-13 (
usecols): hanya kolomtanggal,kota, dantotalyang dibaca; kolomtransaksidilewati sehingga tidak membebani memori. - Baris 14 (
dtype): kolomtotaldipaksa menjadiInt64— tipe integer nullable, sehingga sel yang kosong tetap bisa direpresentasikan sebagai<NA>. - Baris 15 (
na_values): teks-ditambahkan ke daftar nilai yang dianggap missing oleh pandas. - Baris 16 (
parse_dates): kolomtanggaldikonversi dari teks menjadidatetime64[us], tipe tanggal bawaan pandas 3.0.
Hasil akhirnya rapi: kolom tanggal sudah bertipe tanggal, kolom total bertipe integer nullable dengan satu nilai <NA>, dan kolom kota memakai dtype str — tipe teks baru yang menjadi bawaan pandas 3.0. Ringkasan perubahan tipe teks ini dijelaskan pada panduan migrasi string pandas 3.0
, sedangkan referensi lengkap seluruh parameter ada di pandas.read_csv
dan halaman IO Tools
.
Parameter di atas menolong ketika kita membaca CSV yang sudah ada. Namun bila kita yang menentukan format penyimpanan sejak awal, pilihan format yang tepat akan menghemat banyak kerja di kemudian hari — itulah topik chapter terakhir pada Section ini.