0Pricing
Pandas & NumPy Academy · Pelajaran

Konversi Tipe dengan astype()

Konversikan kolom menjadi int, float, string, boolean, dan datetime menggunakan astype(), serta tangani kesalahan konversi yang umum.

Konversi Tipe dengan astype() adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Pengantar astype()

Series.astype(dtype) mengonversi kolom dari tipe saat ini ke tipe yang Anda tentukan. Fungsi ini mengembalikan Series baru (atau DataFrame jika dipanggil pada DataFrame lengkap) tanpa mengubah data asli. Ini adalah alat utama Pandas untuk memperbaiki masalah tipe data setelah memuat data, dan dapat mengonversi antara tipe numerik, menjadi string, menjadi boolean, serta menjadi tipe Categorical.

import pandas as pd

df = pd.DataFrame({'age': ['25', '30', '35']})
print('Before:', df['age'].dtype)  # object

df['age'] = df['age'].astype(int)
print('After:', df['age'].dtype)   # int64
print(df['age'] + 1)               # [26, 31, 36] — arithmetic now works

Mengonversi ke Tipe Numerik

Konversi yang paling umum adalah dari object ke tipe numerik. Anda dapat mengonversinya menjadi 'int64', 'int32', 'float64', 'float32', dan sebagainya. Jika ada nilai dalam kolom yang tidak dapat dikonversi, astype() akan memunculkan ValueError. Gunakan pd.to_numeric(series, errors='coerce') jika kolom mungkin berisi string nonnumerik — fungsi ini mengubah nilai yang tidak valid menjadi NaN, bukan menghentikan program dengan kesalahan.

import pandas as pd

df = pd.DataFrame({'price': ['10.5', '20.0', 'N/A', '30.5']})

# astype would crash on 'N/A'
# price_float = df['price'].astype(float)  # ValueError!

# pd.to_numeric with errors='coerce' is safer
df['price_float'] = pd.to_numeric(df['price'], errors='coerce')
print(df)
#   price  price_float
# 0  10.5         10.5
# 1  20.0         20.0
# 2   N/A          NaN
# 3  30.5         30.5

Mengonversi ke String (object)

Mengonversi kolom menjadi str (atau 'object') mengubah setiap nilai menjadi representasi string-nya. Ini berguna saat Anda perlu menggabungkan kolom numerik dengan kolom teks, atau saat ingin menerapkan metode string pada data numerik, seperti menambahkan nol di depan ID. Pandas juga memiliki tipe data 'string' yang lebih baru dan menyediakan penanganan NA yang lebih baik untuk kolom teks.

import pandas as pd

df = pd.DataFrame({'id': [1, 2, 3], 'region': ['E', 'W', 'N']})

# Concatenate id and region into a composite key
df['key'] = df['id'].astype(str) + '_' + df['region']
print(df)
#    id region  key
# 0   1      E  1_E
# 1   2      W  2_W
# 2   3      N  3_N

Mengonversi ke Boolean

Konversi boolean berguna saat kolom menyimpan True/False sebagai bilangan bulat (0/1) atau sebagai string ('Yes'/'No'). Mengonversi bilangan bulat 0/1 dengan astype(bool) dapat dilakukan secara langsung: 0 menjadi False, sedangkan nilai selain nol menjadi True. Untuk kolom string 'Yes'/'No', petakan terlebih dahulu dengan kamus, lalu lakukan konversi.

import pandas as pd

df = pd.DataFrame({
    'active_int': [1, 0, 1, 0],
    'active_str': ['Yes', 'No', 'Yes', 'No']
})

# Integer to bool
df['active_bool'] = df['active_int'].astype(bool)

# String to bool via mapping
df['active_bool2'] = df['active_str'].map({'Yes': True, 'No': False})

print(df[['active_bool', 'active_bool2']])
#    active_bool  active_bool2
# 0         True          True
# 1        False         False

Menurunkan Ukuran Tipe Numerik

Secara bawaan, Pandas menggunakan tipe 64-bit. Jika nilai bilangan bulat Anda dapat ditampung dalam 32 atau bahkan 8 bit, Anda dapat melakukan penurunan ukuran tipe ke tipe yang lebih kecil untuk mengurangi penggunaan memori hingga setengah (atau seperempatnya). Gunakan pd.to_numeric(series, downcast='integer') atau lakukan konversi secara eksplisit dengan astype('int32'). Ini merupakan pengoptimalan penting untuk kumpulan data berukuran besar.

import pandas as pd
import numpy as np

df = pd.DataFrame({'count': np.random.randint(0, 200, 1_000_000)})

print('int64 bytes:', df['count'].nbytes)   # 8,000,000

df['count_int16'] = df['count'].astype('int16')  # max 32767, fits 0-200
print('int16 bytes:', df['count_int16'].nbytes)  # 2,000,000

# Or let Pandas choose the smallest type automatically
df['count_auto'] = pd.to_numeric(df['count'], downcast='integer')
print('auto dtype:', df['count_auto'].dtype)

Mengonversi DataFrames Lengkap dengan astype(dict)

Anda dapat mengonversi beberapa kolom sekaligus dengan meneruskan kamus ke df.astype(), dengan kunci berupa nama kolom dan nilai berupa tipe data tujuan. Cara ini lebih rapi daripada merangkai penetapan kolom satu per satu dan menjadikan langkah konversi tipe terdokumentasi dengan jelas sebagai satu blok dalam alur kerja Anda.

import pandas as pd

df = pd.DataFrame({
    'age': ['25', '30'],
    'salary': ['50000', '70000'],
    'is_manager': ['1', '0']
})

df = df.astype({
    'age': 'int32',
    'salary': 'float64',
    'is_manager': 'bool'
})
print(df.dtypes)
# age           int32
# salary      float64
# is_manager     bool

Menangani Kesalahan dalam astype()

astype() tidak memiliki mode bawaan yang toleran terhadap kesalahan (berbeda dengan pd.to_numeric). Jika konversi gagal, fungsi ini memunculkan ValueError atau OverflowError. Alur kerja yang aman adalah: (1) bersihkan kolom terlebih dahulu (hapus simbol, isi NaN), (2) lalu lakukan konversi. Sebagai alternatif, gunakan pd.to_numeric(errors='coerce') untuk data numerik atau tulis fungsi pembantu kecil yang menangkap kesalahan konversi.

import pandas as pd

# Clean then cast pattern
df = pd.DataFrame({'price': ['$1,200', '$800', '$450']})

# Step 1: remove non-numeric characters
df['price_clean'] = (
    df['price']
    .str.replace('$', '', regex=False)
    .str.replace(',', '', regex=False)
)
# Step 2: safe cast
df['price_num'] = df['price_clean'].astype(float)
print(df)
#      price price_clean  price_num
# 0  $1,200        1200     1200.0
# 1    $800         800      800.0
# 2    $450         450      450.0

Mengonversi ke Pandas StringDtype

Tipe data 'string' yang lebih baru (varian S kapital atau pd.StringDtype()) diperkenalkan untuk menyediakan dukungan string kelas satu dengan penanganan NA yang tepat — tipe ini menyimpan string yang hilang sebagai pd.NA, bukan None atau np.nan. Tipe ini mengaktifkan pengakses .str sekaligus mempertahankan semantik NA dengan lebih baik daripada tipe data object, dan direkomendasikan untuk kode baru yang menargetkan Pandas 2+.

import pandas as pd

df = pd.DataFrame({'name': ['Alice', None, 'Carol']})

# Convert to the modern string dtype
df['name'] = df['name'].astype('string')
print(df['name'].dtype)   # string
print(df['name'].isna())  # proper NA detection
# 0    False
# 1     True
# 2    False

Risiko Luapan Saat Menurunkan Ukuran Tipe

Saat Anda menurunkan ukuran tipe ke tipe bilangan bulat yang lebih kecil, nilai yang melebihi rentang tipe tersebut akan mengalami luapan secara diam-diam dan berputar kembali. Misalnya, mengonversi 300 menjadi int8 (rentang -128 hingga 127) menghasilkan 44 tanpa memunculkan kesalahan. Selalu pastikan rentang data sebenarnya sesuai dengan tipe tujuan sebelum menurunkan ukuran tipe untuk menghindari kerusakan data yang sulit terdeteksi.

import pandas as pd
import numpy as np

df = pd.DataFrame({'value': [100, 200, 300, 127, 128]})

# int8 range: -128 to 127
df['value_i8'] = df['value'].astype('int8')
print(df)
#    value  value_i8
# 0    100       100
# 1    200       -56   <- overflow! 200-256 = -56
# 2    300        44   <- overflow! 300-256 = 44
# 3    127       127
# 4    128      -128   <- overflow!

# Always check range first
print(df['value'].max())  # 300 > 127 — int8 is UNSAFE here

Memverifikasi Konversi dengan Peta Tipe Data

Setelah melakukan beberapa konversi tipe, validasikan skema akhir dengan membandingkan tipe data sebenarnya dengan peta yang diharapkan. Pola asersi ini menangkap kesalahan seperti kolom yang gagal dikonversi (misalnya, karena NaN menghalangi konversi ke bilangan bulat). Jalankan pemeriksaan ini di akhir fungsi pemuatan data sebagai pengujian skema yang ringan.

import pandas as pd

df = pd.DataFrame({
    'user_id': [1, 2, 3],
    'amount': [10.5, 20.0, 30.5],
    'active': [True, False, True]
})

expected = {'user_id': 'int64', 'amount': 'float64', 'active': 'bool'}

for col, dtype in expected.items():
    assert str(df[col].dtype) == dtype, (
        f'{col}: expected {dtype}, got {df[col].dtype}'
    )
print('Schema validation passed')

Contoh Alur Kerja Konversi Lengkap

Menggabungkan semuanya: berikut adalah alur kerja konversi realistis setelah read_csv yang membersihkan pemformatan, menangani NaN dengan aman, mengonversi ke tipe yang optimal, dan memvalidasi hasilnya. Pola — bersihkan, konversi, validasi — harus menjadi bagian standar dari setiap fungsi pemasukan data.

import pandas as pd

raw = pd.DataFrame({
    'user_id': ['101', '102', '103'],
    'revenue': ['$1,200', '$800', '$2,500'],
    'active': ['Yes', 'No', 'Yes']
})

df = (
    raw
    .assign(
        user_id=raw['user_id'].astype('int32'),
        revenue=pd.to_numeric(
            raw['revenue'].str.replace('[$,]', '', regex=True)
        ),
        active=raw['active'].map({'Yes': True, 'No': False})
    )
)
print(df.dtypes)
# user_id      int32
# revenue    float64
# active        bool

Pemeriksaan Cepat

Uji pemahaman Anda tentang konversi tipe dengan astype().

Rangkuman Pelajaran

Dalam pelajaran ini, Anda mempelajari bahwa astype(dtype) mengonversi kolom atau seluruh DataFrame ke tipe baru, pd.to_numeric(errors='coerce') lebih aman untuk kolom yang berisi string nonnumerik, dan meneruskan kamus ke astype() akan mengonversi beberapa kolom sekaligus. Lakukan penurunan ukuran tipe dengan hati-hati untuk menghindari luapan, dan selalu validasikan skema akhir dengan asersi. Selanjutnya, kita akan mempelajari tipe data Categorical yang hemat memori.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Konversi Tipe dengan astype()” gratis?

Ya — teks lengkap “Konversi Tipe dengan astype()” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Konversi Tipe dengan astype()”?

Konversikan kolom menjadi int, float, string, boolean, dan datetime menggunakan astype(), serta tangani kesalahan konversi yang umum. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Konversi Tipe dengan astype()” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Memeriksa Tipe Data Kolom
  2. Konversi Tipe dengan astype()
  3. Tipe Data Kategorikal
  4. Mengurai Tanggal dengan Benar
← Kembali ke Pandas & NumPy Academy