Menggabungkan dan Membersihkan Kolom Teks
Gabungkan beberapa kolom menjadi satu string, hapus spasi di awal dan akhir, lalu seragamkan label kategori yang tidak konsisten.
Menggabungkan dan Membersihkan Kolom Teks adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Menggabungkan Kolom Teks
Tugas persiapan data yang umum adalah membuat satu string dengan menggabungkan nilai dari beberapa kolom — misalnya, membuat nama lengkap dari nama depan dan nama belakang, atau alamat dari jalan, kota, dan negara. Di Pandas, Anda menggabungkan kolom string menggunakan operator + pada dua Series (atau Series dan string literal), setelah mengonversi kolom numerik menjadi string dengan .astype(str).
import pandas as pd
df = pd.DataFrame({
'first_name': ['Alice', 'Bob', 'Carol'],
'last_name': ['Smith', 'Jones', 'White']
})
df['full_name'] = df['first_name'] + ' ' + df['last_name']
print(df['full_name'].tolist())
# ['Alice Smith', 'Bob Jones', 'Carol White']Menggabungkan dengan Kolom Non-String
Ketika menggabungkan kolom numerik dengan kolom string, Anda harus terlebih dahulu mengonversi kolom numerik menjadi string menggunakan .astype(str). Operator + Python akan menimbulkan TypeError jika Anda mencoba menjumlahkan Series string dan Series integer. Ini adalah sumber kebingungan yang umum saat membuat kunci gabungan atau label dari kolom dengan tipe campuran.
import pandas as pd
df = pd.DataFrame({
'product': ['Widget', 'Gadget'],
'version': [3, 5]
})
# Must convert int to str before concatenating
df['label'] = df['product'] + ' v' + df['version'].astype(str)
print(df['label'].tolist())
# ['Widget v3', 'Gadget v5']str.cat() untuk Menggabungkan dengan Pemisah
Series.str.cat(others, sep=) adalah cara asli Pandas untuk menggabungkan beberapa Series dengan pemisah, sekaligus menangani nilai NaN dengan baik. Secara default, NaN di kolom mana pun menyebabkan hasil untuk baris tersebut menjadi NaN. Gunakan na_rep='?' (atau string apa pun) untuk mengganti NaN dengan penanda, bukan meneruskannya ke hasil.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'city': ['NYC', 'LA', None],
'state': ['NY', None, 'TX'],
'country': ['USA', 'USA', 'USA']
})
# Join with ', ' — NaN rows produce NaN by default
df['location'] = df['city'].str.cat(
[df['state'], df['country']],
sep=', ',
na_rep='N/A'
)
print(df['location'].tolist())
# ['NYC, NY, USA', 'LA, N/A, USA', 'N/A, TX, USA']Menormalkan Label Kategori yang Tidak Konsisten
Kolom kategori di dunia nyata sering memiliki label yang tidak konsisten akibat salah ketik, variasi penggunaan huruf besar-kecil, atau singkatan yang berbeda (misalnya, 'US', 'USA', 'United States'). Perbaikan standar adalah membuat kamus pemetaan yang memetakan setiap variasi ke bentuk kanonis, lalu menerapkannya dengan .map() atau .replace().
import pandas as pd
df = pd.DataFrame({
'country': ['US', 'USA', 'United States', 'uk', 'UK', 'United Kingdom']
})
canonical = {
'US': 'United States', 'USA': 'United States', 'United States': 'United States',
'uk': 'United Kingdom', 'UK': 'United Kingdom', 'United Kingdom': 'United Kingdom'
}
df['country_clean'] = df['country'].map(canonical)
print(df['country_clean'].tolist())
# ['United States', 'United States', 'United States',
# 'United Kingdom', 'United Kingdom', 'United Kingdom']Menghapus Spasi dan Menyeragamkan Huruf Besar-Kecil
Sebelum membandingkan atau mengelompokkan kolom teks, selalu hapus spasi kosong dan normalkan penggunaan huruf besar-kecil sebagai langkah pembersihan pertama. Dua nilai yang tampak sama bagi manusia (' Active' dan 'active') diperlakukan berbeda oleh Pandas karena adanya spasi di awal dan perbedaan penggunaan huruf besar-kecil. Rangkaian dua langkah — hapus spasi lalu gunakan lower — menangani kedua masalah tersebut.
import pandas as pd
df = pd.DataFrame({
'status': [' Active', 'INACTIVE', 'active ', ' Pending ', 'ACTIVE']
})
df['status_clean'] = df['status'].str.strip().str.lower()
print(df['status_clean'].value_counts())
# active 3
# inactive 1
# pending 1Pencocokan Fuzzy untuk Memperbaiki Salah Ketik
Ketika salah ketik menghalangi pencocokan tepat, pencocokan fuzzy menghitung skor kemiripan antaranteks. Pustaka rapidfuzz (atau fuzzywuzzy klasik) menyediakan pencocokan fuzzy tervectorisasi. Alur kerja yang umum adalah: untuk setiap nilai unik yang kotor, cari nilai kanonis terdekat yang berada di atas ambang kemiripan, lalu buat peta koreksi.
# Conceptual example (requires: pip install rapidfuzz)
from rapidfuzz import process
canonical_cities = ['New York', 'Los Angeles', 'Chicago', 'Houston']
dirty_values = ['New Yrok', 'Los Angelas', 'Chicagoo']
for dirty in dirty_values:
best, score, _ = process.extractOne(dirty, canonical_cities)
print(f'{dirty!r} -> {best!r} (score={score:.0f}%)')
# 'New Yrok' -> 'New York' (score=91%)
# 'Los Angelas'-> 'Los Angeles' (score=96%)
# 'Chicagoo' -> 'Chicago' (score=94%)Memisahkan Sel dengan Banyak Nilai menggunakan explode()
Terkadang sebuah sel berisi beberapa nilai yang dipisahkan oleh pembatas (misalnya, 'python,sql,pandas'). Pisahkan kolom tersebut untuk mendapatkan daftar, lalu panggil .explode() guna membuat satu baris untuk setiap nilai. Proses ini mengubah sel lebar yang padat menjadi format panjang yang rapi, dengan tepat satu nilai di setiap baris — hal yang diperlukan untuk operasi groupby dan penggabungan pada nilai-nilai tersebut.
import pandas as pd
df = pd.DataFrame({
'user_id': [1, 2, 3],
'skills': ['python,sql', 'java,kotlin,sql', 'python']
})
df['skills'] = df['skills'].str.split(',')
exploded = df.explode('skills')
print(exploded)
# user_id skills
# 0 1 python
# 0 1 sql
# 1 2 java
# 1 2 kotlin
# 1 2 sql
# 2 3 pythonMenangani Pengodean Teks Campuran
Data teks dari berbagai sumber mungkin memiliki masalah pengodean — karakter aneh seperti \xa0 (spasi tanpa pemisah baris), \u2019 (apostrof melengkung), atau karakter beraksen yang rusak. Gunakan .str.encode('ascii', errors='replace').str.decode('ascii') untuk pembersihan cepat yang hanya menggunakan ASCII, atau .str.normalize('NFKD') untuk menguraikan aksen sebelum menghapusnya.
import pandas as pd
import unicodedata
df = pd.DataFrame({'name': ['Caf\u00e9', 'na\u00efve', 'r\u00e9sum\u00e9']})
# Normalize and strip accents (NFKD decomposition + ascii encoding)
df['name_ascii'] = (
df['name']
.str.normalize('NFKD')
.str.encode('ascii', errors='ignore')
.str.decode('ascii')
)
print(df)
# name name_ascii
# 0 Cafe Cafe
# 1 naive naive
# 2 resume resumeMembuat Kunci Komposit
Dalam banyak kumpulan data, Anda perlu membuat kunci komposit dari beberapa kolom untuk mengidentifikasi baris secara unik saat melakukan penggabungan atau menghapus duplikasi. Menggabungkan kolom string yang telah dibersihkan (spasi dihapus, huruf kecil, dan dinormalkan) menjadi satu string kunci memastikan pencocokan yang konsisten di berbagai sumber data, ketika entitas yang sama mungkin dieja sedikit berbeda di setiap sumber.
import pandas as pd
df = pd.DataFrame({
'first': [' Alice', 'BOB', ' Carol'],
'last': ['Smith ', 'JONES', 'White '],
'dob': ['1990-01-15', '1985-07-22', '1992-11-30']
})
df['match_key'] = (
df['first'].str.strip().str.lower() + '|' +
df['last'].str.strip().str.lower() + '|' +
df['dob']
)
print(df['match_key'].tolist())
# ['alice|smith|1990-01-15', 'bob|jones|1985-07-22', 'carol|white|1992-11-30']Menerapkan Daftar Kategori Kanonis
Setelah pembersihan, validasikan bahwa semua nilai dalam kolom teks kategorikal termasuk dalam kumpulan kanonis yang dikenal. Nilai apa pun yang tidak termasuk dalam kumpulan tersebut mungkin menunjukkan kategori baru yang valid atau kesalahan data. Catat atau tandai nilai yang tidak dikenal untuk ditinjau secara manual, alih-alih menghapusnya secara diam-diam, agar tidak ada yang terlewat tanpa diketahui.
import pandas as pd
df = pd.DataFrame({
'status': ['active', 'inactive', 'active', 'archived', 'unknown_status']
})
canonical = {'active', 'inactive', 'archived'}
unknown = df[~df['status'].isin(canonical)]['status'].unique()
print('Unknown statuses:', unknown.tolist())
# ['unknown_status']
# Flag unknown rows
df['status_valid'] = df['status'].isin(canonical)
print(df)Alur Pembersihan Teks Lengkap
Berikut adalah alur pembersihan teks lengkap yang menerapkan semua teknik dari pelajaran ini: menghapus spasi kosong, menormalkan penggunaan huruf besar-kecil, memperbaiki singkatan, menghapus karakter khusus, dan memvalidasi terhadap daftar kanonis. Inilah jenis fungsi yang dapat digunakan kembali dan ditambahkan ke modul pemasukan data mana pun.
import pandas as pd
def clean_category_column(series, canonical_map, canonical_set):
cleaned = (
series
.str.strip()
.str.lower()
.map(lambda x: canonical_map.get(x, x)) # fix known variants
)
unknown = cleaned[~cleaned.isin(canonical_set)]
if not unknown.empty:
print('Warning: unknown values:', unknown.unique().tolist())
return cleaned
cmap = {'eng': 'engineering', 'hr': 'human_resources', 'mktg': 'marketing'}
cset = {'engineering', 'human_resources', 'marketing', 'finance'}
df = pd.DataFrame({'dept': ['Eng', 'HR', 'Marketing', 'MKTG', 'Legal']})
df['dept_clean'] = clean_category_column(df['dept'], cmap, cset)
print(df)Pemeriksaan Singkat
Uji pemahaman Anda tentang penggabungan dan pembersihan kolom teks.
Ringkasan Pelajaran
Dalam pelajaran ini, Anda mempelajari cara: menggabungkan kolom dengan operator + setelah mengonversi numerik menjadi string, menggunakan str.cat(sep=) untuk menggabungkan dengan pembatas dan menangani NaN, menerapkan pemetaan kanonis dengan .map() untuk menormalkan label yang tidak konsisten, serta menggunakan explode() untuk mengembangkan sel berisi daftar menjadi beberapa baris. Terapkan kumpulan kanonis untuk mendeteksi masalah kualitas data sejak awal. Selanjutnya, kita akan mengurutkan DataFrames berdasarkan nilai kolom.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menggabungkan dan Membersihkan Kolom Teks” gratis?
Ya — teks lengkap “Menggabungkan dan Membersihkan Kolom Teks” 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 “Menggabungkan dan Membersihkan Kolom Teks”?
Gabungkan beberapa kolom menjadi satu string, hapus spasi di awal dan akhir, lalu seragamkan label kategori yang tidak konsisten. 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 4 dari 4.
Berapa lama pelajaran “Menggabungkan dan Membersihkan Kolom Teks” 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
- Akses .str
- Memisahkan dan Mengganti String
- Pencocokan Pola dengan Regex
- Menggabungkan dan Membersihkan Kolom Teks