I/O Data

Pandas menyediakan berbagai fungsi untuk membaca dan menulis data dari berbagai format file.

CSV Files

Membaca CSV

import pandas as pd

# Baca CSV dasar
df = pd.read_csv('data.csv')

# Dengan parameter
df = pd.read_csv('data.csv',
                  sep=',',           # Separator
                  header=0,          # Baris header (0 = pertama)
                  index_col=0,       # Kolom sebagai index
                  usecols=['A', 'B'], # Kolom yang dibaca
                  dtype={'A': int},   # Tipe data
                  na_values=['NA', '-'],  # Nilai NA custom
                  nrows=100,         # Jumlah baris
                  skiprows=1,        # Skip baris awal
                  encoding='utf-8')  # Encoding

Excel Files

Membaca Excel

import pandas as pd

# Baca Excel
df = pd.read_excel('data.xlsx')

# Baca sheet tertentu
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# Baca multiple sheets
dfs = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet2'])
# dfs adalah dictionary

# Baca semua sheets
dfs = pd.read_excel('data.xlsx', sheet_name=None)

JSON Files

Membaca JSON

import pandas as pd

# Baca JSON
df = pd.read_json('data.json')

# Dari JSON string
json_str = '[{"nama": "Ahmad", "nilai": 85}, {"nama": "Budi", "nilai": 90}]'
df = pd.read_json(json_str)

# Orientasi berbeda
df = pd.read_json('data.json', orient='records')  # List of dicts
df = pd.read_json('data.json', orient='columns')  # Dict of columns
df = pd.read_json('data.json', orient='index')    # Dict of rows

SQL Database

Membaca dari SQL

import pandas as pd
import sqlite3

# Koneksi ke database
conn = sqlite3.connect('database.db')

# Baca tabel
df = pd.read_sql('SELECT * FROM mahasiswa', conn)

# Query dengan parameter
df = pd.read_sql(
    'SELECT * FROM mahasiswa WHERE jurusan = ?',
    conn,
    params=['TI']
)

# Baca seluruh tabel
df = pd.read_sql_table('mahasiswa', conn)

conn.close()

HTML Tables

Membaca HTML

import pandas as pd

# Baca tabel dari HTML (return list of DataFrames)
tables = pd.read_html('https://example.com/table.html')
df = tables[0]  # Tabel pertama

# Dari file lokal
tables = pd.read_html('data.html')

# Dengan matching
tables = pd.read_html('page.html', match='Nama')  # Cari tabel dengan kata "Nama"

Pickle (Python Object)

import pandas as pd

df = pd.DataFrame({
    'nama': ['Ahmad', 'Budi'],
    'nilai': [85, 90]
})

# Simpan ke pickle
df.to_pickle('data.pkl')

# Baca dari pickle
df_loaded = pd.read_pickle('data.pkl')

Catatan

Pickle menyimpan objek Python secara binary. Ini lebih cepat untuk read/write tapi tidak portable antar bahasa pemrograman.

Parquet (Columnar Format)

import pandas as pd

df = pd.DataFrame({
    'nama': ['Ahmad', 'Budi'],
    'nilai': [85, 90]
})

# Simpan ke parquet (perlu pyarrow atau fastparquet)
df.to_parquet('data.parquet', engine='pyarrow')

# Baca dari parquet
df_loaded = pd.read_parquet('data.parquet')

Parquet sangat efisien untuk data besar dan mendukung kompresi.

Feather Format

import pandas as pd

df = pd.DataFrame({
    'nama': ['Ahmad', 'Budi'],
    'nilai': [85, 90]
})

# Simpan ke feather
df.to_feather('data.feather')

# Baca dari feather
df_loaded = pd.read_feather('data.feather')

Feather sangat cepat untuk read/write dan interoperabel dengan R.

Clipboard

import pandas as pd

# Baca dari clipboard (copy dari Excel)
df = pd.read_clipboard()

# Tulis ke clipboard
df.to_clipboard(index=False)

Membaca Data Besar

Chunking

import pandas as pd

# Baca file besar dalam chunks
chunks = pd.read_csv('large_file.csv', chunksize=10000)

# Proses setiap chunk
for chunk in chunks:
    # Proses chunk
    process(chunk)

# Atau kombinasikan
result = pd.concat([process(chunk) for chunk in chunks])

Optimasi Memory

import pandas as pd

# Baca dengan tipe data optimal
df = pd.read_csv('data.csv', dtype={
    'id': 'int32',      # Lebih kecil dari int64
    'kategori': 'category',  # Efisien untuk nilai berulang
    'aktif': 'bool'
})

# Konversi setelah baca
df['kategori'] = df['kategori'].astype('category')

Contoh Praktis

Pipeline I/O

import pandas as pd

def load_and_process(filepath):
    """Load data, process, dan return DataFrame bersih."""
    # Baca file
    df = pd.read_csv(filepath, encoding='utf-8')
    
    # Bersihkan nama kolom
    df.columns = df.columns.str.lower().str.replace(' ', '_')
    
    # Handle missing values
    df = df.dropna(subset=['id'])
    
    # Konversi tipe
    df['tanggal'] = pd.to_datetime(df['tanggal'])
    
    return df

def save_results(df, output_path):
    """Save DataFrame ke berbagai format."""
    # CSV untuk sharing
    df.to_csv(f'{output_path}.csv', index=False)
    
    # Parquet untuk storage efisien
    df.to_parquet(f'{output_path}.parquet')
    
    # Excel untuk non-technical users
    df.to_excel(f'{output_path}.xlsx', index=False)

# Penggunaan
df = load_and_process('raw_data.csv')
df_processed = df.groupby('kategori').sum()
save_results(df_processed, 'hasil_analisis')

Membaca dari URL

import pandas as pd

# CSV dari URL
url = 'https://example.com/data.csv'
df = pd.read_csv(url)

# JSON dari API
api_url = 'https://api.example.com/data'
df = pd.read_json(api_url)

Latihan

  1. Baca file CSV dengan encoding berbeda dan handling missing values

  2. Export DataFrame ke multiple sheets dalam satu file Excel

  3. Baca data dari SQLite database dan join dengan CSV

  4. Implementasikan fungsi yang membaca format otomatis berdasarkan ekstensi file