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:

ParameterFungsiContoh
sepMenentukan karakter pemisah antar kolomsep=";"
headerMemilih baris yang dipakai sebagai nama kolomheader=None
namesMemberi daftar nama kolom sendirinames=["produk", "harga"]
usecolsMembaca sebagian kolom sajausecols=["tanggal", "total"]
dtypeMemaksa tipe data kolom tertentudtype={"total": "Int64"}
na_valuesMenambah teks yang dianggap missingna_values=["-"]
parse_datesMengubah kolom tanggal menjadi datetime64parse_dates=["tanggal"]
encodingMenyesuaikan set karakter fileencoding="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.

python
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:

text
       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: object

Baris 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.

python
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:

text
     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: object

Baris demi baris, inilah peran tiap parameter:

  1. Baris 12-13 (usecols): hanya kolom tanggal, kota, dan total yang dibaca; kolom transaksi dilewati sehingga tidak membebani memori.
  2. Baris 14 (dtype): kolom total dipaksa menjadi Int64 — tipe integer nullable, sehingga sel yang kosong tetap bisa direpresentasikan sebagai <NA>.
  3. Baris 15 (na_values): teks - ditambahkan ke daftar nilai yang dianggap missing oleh pandas.
  4. Baris 16 (parse_dates): kolom tanggal dikonversi dari teks menjadi datetime64[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.