alltools.one
Data
2025-07-01
8 min
alltools.one Team
CSVData CleaningData AnalysisETLPython

Tips Pembersihan Data CSV untuk Analis dan Developer

File CSV adalah format pertukaran universal untuk data tabular. Formatnya sederhana, mudah dibaca manusia, dan didukung oleh setiap alat mulai dari Excel hingga pandas. Namun file CSV di dunia nyata sering kali berantakan — encoding tidak konsisten, nilai kosong, tipe data campuran, dan baris yang malformat. Panduan ini membahas teknik praktis untuk membersihkan data CSV secara andal.

Masalah CSV yang Umum

1. Masalah Encoding

Masalah CSV yang paling membuat frustrasi adalah encoding. File yang dibuat di Windows menggunakan Excel mungkin menggunakan windows-1252, sementara skrip Python Anda mengharapkan utf-8.

Gejala: Karakter kacau (mojibake) seperti é alih-alih é, atau exception UnicodeDecodeError.

Deteksi:

import chardet

with open('data.csv', 'rb') as f:
    result = chardet.detect(f.read(10000))
    print(result)  # {'encoding': 'Windows-1252', 'confidence': 0.73}

Perbaikan: Baca dengan encoding yang terdeteksi, lalu simpan sebagai UTF-8:

import pandas as pd

df = pd.read_csv('data.csv', encoding='windows-1252')
df.to_csv('data_clean.csv', encoding='utf-8', index=False)

2. Delimiter yang Tidak Konsisten

Tidak semua "CSV" menggunakan koma. File CSV Eropa sering menggunakan titik koma karena koma adalah pemisah desimal di banyak locale Eropa.

# Auto-detect delimiter
import csv

with open('data.csv', 'r') as f:
    dialect = csv.Sniffer().sniff(f.read(5000))
    print(f"Delimiter: {repr(dialect.delimiter)}")

CSV Editor kami menangani deteksi delimiter secara otomatis — tempel data Anda dan formatnya akan teridentifikasi.

3. Nilai Kosong

Data yang hilang muncul dalam berbagai bentuk: sel kosong, NA, N/A, null, -, atau hanya spasi.

# Standardize all missing value representations
df = pd.read_csv('data.csv', na_values=['NA', 'N/A', 'null', '-', '', ' '])

# Check missing values per column
print(df.isnull().sum())

# Strategy 1: Drop rows with missing critical fields
df = df.dropna(subset=['email', 'name'])

# Strategy 2: Fill with defaults
df['country'] = df['country'].fillna('Unknown')

# Strategy 3: Forward fill (time series)
df['price'] = df['price'].ffill()

4. Baris Duplikat

Duplikat persis mudah ditemukan. Duplikat fuzzy (orang yang sama dengan ejaan nama yang sedikit berbeda) lebih sulit.

# Find exact duplicates
duplicates = df[df.duplicated(keep=False)]
print(f"Found {len(duplicates)} duplicate rows")

# Remove duplicates, keeping the first occurrence
df = df.drop_duplicates()

# Remove duplicates based on specific columns
df = df.drop_duplicates(subset=['email'], keep='last')

5. Format Data yang Tidak Konsisten

Tanggal dalam format campuran, nomor telepon dengan dan tanpa kode negara, kapitalisasi yang tidak konsisten:

# Standardize dates
df['date'] = pd.to_datetime(df['date'], format='mixed', dayfirst=False)

# Standardize text fields
df['name'] = df['name'].str.strip().str.title()
df['email'] = df['email'].str.strip().str.lower()

# Standardize phone numbers (basic)
df['phone'] = df['phone'].str.replace(r'[^0-9+]', '', regex=True)

6. Masalah Tipe Data

CSV menyimpan semuanya sebagai teks. Angka dengan nol di depan, kode pos, dan nomor telepon bisa kehilangan format saat di-parse:

# Preserve leading zeros in zip codes
df = pd.read_csv('data.csv', dtype={'zip_code': str, 'phone': str})

# Convert currency strings to numbers
df['price'] = df['price'].str.replace('$', '').str.replace(',', '').astype(float)

Validasi Setelah Pembersihan

Selalu validasi data yang sudah dibersihkan:

# Check row count (did we lose or gain rows unexpectedly?)
print(f"Rows: {len(df)}")

# Check data types
print(df.dtypes)

# Check value ranges
print(df.describe())

# Check for remaining nulls
print(df.isnull().sum())

# Validate unique constraints
assert df['email'].is_unique, "Duplicate emails found!"

Alat Command-Line

Untuk pembersihan cepat tanpa menulis kode:

# Convert encoding
iconv -f WINDOWS-1252 -t UTF-8 input.csv > output.csv

# Sort and remove duplicate lines
sort -u input.csv > output.csv

# Extract specific columns (cut)
cut -d',' -f1,3,5 input.csv > output.csv

# Filter rows (awk)
awk -F',' '$3 > 100' input.csv > filtered.csv

Untuk transformasi yang lebih kompleks, alat seperti csvkit menyediakan serangkaian utilitas CSV lengkap:

# Install
pip install csvkit

# View column names
csvcut -n data.csv

# Filter rows
csvgrep -c country -m "USA" data.csv > usa_only.csv

# Convert to JSON
csvjson data.csv > data.json

Ingin mengonversi antara CSV dan JSON? Konverter CSV ke JSON kami menanganinya secara instan.

FAQ

Berapa ukuran file maksimum untuk pemrosesan CSV?

Tidak ada batas bawaan dalam format CSV. Batas praktisnya tergantung pada alat Anda: Excel menangani sekitar 1 juta baris, pandas bekerja dengan baik hingga beberapa GB dengan RAM yang memadai, dan alat seperti Dask atau Polars menangani dataset yang lebih besar dari memori. Untuk alat berbasis browser, CSV editor kami menangani file hingga 100MB.

Sebaiknya menggunakan CSV atau JSON untuk pertukaran data?

CSV paling cocok untuk data tabular datar (spreadsheet, ekspor database, daftar sederhana). JSON lebih baik untuk data bersarang dan hierarkis (respons API, konfigurasi, dokumen dengan struktur yang bervariasi). Untuk perbandingan detail, lihat panduan CSV vs JSON vs XML kami.

Sumber Terkait

Published on 2025-07-01
CSV Data Cleaning Tips for Analysts and Developers | alltools.one