Pernah sudah siap menganalisis data, tapi tiba-tiba muncul error seperti ini?
TypeError: unsupported operand type(s) for +: 'int' and 'str'Atau mungkin kamu mencoba menghitung rata-rata sebuah kolom yang seharusnya berisi angka, tapi hasilnya malah error karena Pandas menganggap kolom tersebut sebagai teks?
Ini adalah masalah yang sangat umum dan hampir pasti akan kamu temui saat bekerja dengan data nyata. Penyebabnya satu: tipe data kolom tidak sesuai dengan yang seharusnya.
Di artikel ini kita akan belajar cara mendeteksi masalah ini dan cara mengatasinya menggunakan Pandas, langkah demi langkah.
Cara Mengubah Tipe Data Kolom di Pandas: Panduan Praktis untuk Pemula
Waktu pertama kali saya serius belajar data analysis, ada satu momen yang cukup bikin frustrasi. Saya sudah berhasil membaca file CSV, datanya kelihatan lengkap, tapi begitu mencoba menghitung rata-rata usia penumpang, Python langsung lempar error.
Ternyata masalahnya bukan di kodenya. Masalahnya di tipe data. Kolom yang saya kira berisi angka, ternyata dibaca Pandas sebagai teks. Dan Pandas tidak bisa menghitung rata-rata dari teks.
Kalau kamu pernah mengalami hal serupa, atau ingin tahu cara mencegahnya sebelum masalah itu muncul, artikel ini akan membahasnya dari awal sampai selesai.
Mengapa Tipe Data Itu Penting?
Bayangkan kamu punya kolom berisi angka seperti 22, 35, 28. Kalau Pandas membacanya sebagai teks (object), maka kamu tidak bisa menghitung rata-rata, menjumlahkan, atau membuat grafik darinya. Pandas tidak tahu bahwa angka-angka itu sebenarnya adalah bilangan karena ia menganggapnya sama seperti tulisan biasa.
Inilah kenapa sebelum mulai analisis, penting untuk memastikan setiap kolom punya tipe data yang tepat. Kolom berisi angka harus bertipe int atau float, kolom berisi tanggal harus bertipe datetime, dan kolom berisi kategori bisa diubah ke tipe category agar lebih efisien.
Tipe Data yang Perlu Kamu Tahu
Sebelum praktik, kenalan dulu dengan tipe data yang paling sering ditemui di Pandas:
int64 → Bilangan bulat, contoh: 1, 25, 100
float64 → Bilangan desimal, contoh: 3.14, 22.5, 0.001
object → Teks atau campuran, ini yang sering jadi masalah karena angka pun bisa terbaca sebagai object
bool → Nilai benar atau salah (True/False)
datetime64 → Tanggal dan waktu
category → Data kategorikal seperti jenis kelamin, kota, status
Langkah 1 — Siapkan Data dan Cek Tipe Data Awal
Buka Jupyter Notebook, lalu buat notebook baru. Kita akan menggunakan dataset Titanic yang sudah familiar.
Ketik kode berikut di sel pertama:
import pandas as pd
df = pd.read_csv('C:/Users/acer/Downloads/titanic/train.csv')
df.dtypes
Perintah df.dtypes menampilkan tipe data setiap kolom. Jalankan dengan Shift + Enter.
Perhatikan hasilnya. Kamu akan melihat beberapa kolom bertipe float64 padahal seharusnya bisa jadi int, dan beberapa kolom bertipe object. Dari sinilah kita mulai bekerja.
Langkah 2 — Mengubah Tipe Data dengan astype()
Cara paling umum untuk mengubah tipe data di Pandas adalah menggunakan metode astype(). Formatnya sederhana:
df['nama_kolom'] = df['nama_kolom'].astype('tipe_baru')
Contoh 1: Mengubah float menjadi int
Kolom PassengerId dan Survived di dataset Titanic bertipe float64, padahal isinya bilangan bulat semua. Mari ubah:
df['PassengerId'] = df['PassengerId'].astype('int64')
df['Survived'] = df['Survived'].astype('int64')
print(df[['PassengerId', 'Survived']].dtypes)
Contoh 2: Mengubah object menjadi category
Kolom Sex berisi nilai male dan female, hanya dua kemungkinan. Tipe data category lebih efisien untuk kolom seperti ini karena menghemat memori.
df['Sex'] = df['Sex'].astype('category')
print(df['Sex'].dtype)
print(df['Sex'].unique())
Contoh 3: Mengubah beberapa kolom sekaligus
Kalau mau mengubah banyak kolom dalam satu baris, gunakan dictionary:
df = df.astype({
'Pclass': 'int64',
'SibSp': 'int64',
'Parch': 'int64'
})
print(df[['Pclass', 'SibSp', 'Parch']].dtypes)
Langkah 3 — Mengubah Tipe Data Angka dengan pd.to_numeric()
Selain astype(), ada cara lain yang lebih aman untuk mengubah kolom menjadi angka, yaitu pd.to_numeric(). Kelebihannya, fungsi ini bisa menangani nilai yang tidak bisa diubah tanpa langsung error.
df['Fare'] = pd.to_numeric(df['Fare'])
print(df['Fare'].dtype)
Parameter tambahan yang berguna: errors='coerce' akan mengubah nilai yang tidak bisa dikonversi menjadi NaN daripada memunculkan error.
df['Age'] = pd.to_numeric(df['Age'], errors='coerce')
print(df['Age'].dtype)
Langkah 4 — Mengubah Kolom Tanggal dengan pd.to_datetime()
Untuk kolom yang berisi tanggal, astype() biasanya tidak cukup. Kita butuh pd.to_datetime() agar Pandas benar-benar mengenalinya sebagai tanggal dan bukan sekadar teks.
Karena dataset Titanic tidak punya kolom tanggal, kita buat contoh kecil sendiri:
data_contoh = pd.DataFrame({
'tanggal': ['2024-01-15', '2024-02-20', '2024-03-10'],
'nilai': [100, 200, 300]
})
print("Sebelum diubah:")
print(data_contoh.dtypes)
data_contoh['tanggal'] = pd.to_datetime(data_contoh['tanggal'])
print("\nSetelah diubah:")
print(data_contoh.dtypes)
Setelah diubah, kamu bisa melakukan berbagai operasi tanggal seperti mengambil tahun, bulan, atau hari dengan mudah.
Langkah 5 — Verifikasi Semua Perubahan
Setelah semua perubahan dilakukan, cek ulang tipe data keseluruhan DataFrame untuk memastikan semuanya sudah sesuai:
df.dtypes
Bandingkan hasilnya dengan output di Langkah 1 tadi. Semua kolom yang tadi kamu ubah seharusnya sudah menampilkan tipe data yang baru.
Hal yang Perlu Diperhatikan
Ada beberapa kondisi yang bisa menyebabkan error saat mengubah tipe data:
Kolom mengandung nilai kosong (NaN) Mengubah kolom yang punya NaN ke tipe int akan menyebabkan error karena integer tidak mendukung nilai kosong. Solusinya, isi nilai kosong dulu sebelum mengubah tipe:
df['Age'] = df['Age'].fillna(0).astype('int64')
Kolom object berisi campuran angka dan teks Kalau ada satu saja nilai teks di kolom yang seharusnya angka, astype() akan error. Gunakan errors='coerce' di pd.to_numeric() untuk mengatasinya.
Rangkuman
df.dtypes → Melihat tipe data semua kolom
astype(‘tipe’) → Mengubah tipe data satu atau beberapa kolom
pd.to_numeric() → Mengubah kolom menjadi angka dengan penanganan error yang lebih aman
pd.to_datetime() → Mengubah kolom menjadi format tanggal
Kesimpulan
Mengubah tipe data kolom adalah salah satu langkah persiapan data yang paling sering dilakukan sebelum analisis dimulai. Data yang masuk ke dalam Python tidak selalu langsung memiliki tipe yang tepat, dan tugas seorang data analyst adalah memastikan setiap kolom terbaca sesuai dengan apa yang sebenarnya ia representasikan.
Dengan menguasai astype(), pd.to_numeric(), dan pd.to_datetime(), kamu sudah punya bekal yang cukup untuk menangani sebagian besar masalah tipe data yang akan ditemui di lapangan.