Pandas & NumPy Academy · Pelajaran

Menggabung dan Membersihkan Lajur Teks

Gabungkan beberapa lajur menjadi satu rentetan, buang ruang kosong dan seragamkan label kategori yang tidak konsisten.

Pelajaran 4 daripada 413 langkah

Menggabung dan Membersihkan Lajur Teks ialah pelajaran Pandas & NumPy Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pandas & NumPy Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.

Menggabungkan Lajur Teks

Tugas penyediaan data yang biasa ialah membina satu rentetan dengan menggabungkan nilai daripada beberapa lajur — contohnya, mencipta nama penuh daripada nama pertama dan nama akhir, atau alamat daripada jalan, bandar dan negara. Dalam Pandas, Anda menggabungkan lajur rentetan menggunakan operator + pada dua Series (atau satu Series dan literal rentetan), selepas menukarkan lajur berangka kepada rentetan 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 Lajur Bukan Rentetan

Apabila menggabungkan lajur berangka dengan lajur rentetan, Anda mesti menukarkan lajur berangka kepada rentetan terlebih dahulu menggunakan .astype(str). Operator + Python akan menghasilkan TypeError jika Anda cuba menambah Series rentetan dengan Series integer. Ini ialah punca kekeliruan yang biasa apabila membina kunci gabungan atau label daripada lajur yang mempunyai jenis bercampur.

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']

<code>Series.str.cat()</code> untuk Penggabungan dengan Pemisah

Series.str.cat(others, sep=) ialah cara natif Pandas untuk menggabungkan beberapa Series dengan pemisah, sambil mengendalikan nilai NaN dengan baik. Secara lalai, NaN dalam mana-mana lajur menyebabkan hasil bagi baris tersebut menjadi NaN. Hantar na_rep='?' (atau sebarang rentetan) untuk menggantikan NaN dengan ruang letak dan bukannya menyebarkannya.

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

Lajur kategori dalam data dunia sebenar sering mempunyai label yang tidak konsisten disebabkan oleh kesilapan ejaan, variasi huruf besar-kecil atau singkatan yang berbeza (contohnya, 'US', 'USA', 'United States'). Pembetulan standard adalah dengan mencipta kamus pemetaan yang memetakan setiap variasi kepada bentuk kanonik, kemudian 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']

Membuang Ruang dan Menyeragamkan Huruf Besar-Kecil

Sebelum membandingkan atau mengumpulkan lajur teks, sentiasa buang ruang kosong dan normalkan huruf besar-kecil sebagai langkah pembersihan pertama. Dua nilai yang kelihatan sama kepada manusia (' Active' dan 'active') dianggap berbeza oleh Pandas kerana ruang di hadapan dan perbezaan penggunaan huruf besar. Rantaian dua langkah — strip kemudian lower — mengatasi kedua-dua masalah ini.

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     1

Padanan Kabur untuk Membetulkan Kesilapan Ejaan

Apabila kesilapan ejaan menghalang padanan tepat, padanan kabur mengira skor kesamaan antara rentetan. Pustaka rapidfuzz (atau fuzzywuzzy klasik) menyediakan padanan kabur tervektor. Aliran kerja biasa: bagi setiap nilai unik yang kotor, cari nilai kanonik terdekat yang melebihi ambang kesamaan dan bina peta pembetulan.

# 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 Berbilang Nilai dengan explode()

Kadangkala sel mengandungi beberapa nilai yang dipisahkan oleh pembatas (contohnya, 'python,sql,pandas'). Pisahkan lajur untuk mendapatkan senarai, kemudian panggil .explode() bagi mencipta satu baris untuk setiap nilai. Ini menukar sel lebar yang padat kepada format panjang yang kemas, iaitu setiap baris mempunyai tepat satu nilai — diperlukan untuk operasi groupby dan cantuman pada 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   python

Mengendalikan Pengekodan Campuran dalam Teks

Data teks daripada sumber yang berbeza mungkin mempunyai masalah pengekodan — aksara pelik seperti \xa0 (ruang tidak terputus), \u2019 (apostrof melengkung) atau aksara beraksen yang rosak. Gunakan .str.encode('ascii', errors='replace').str.decode('ascii') untuk pembersihan pantas yang hanya menggunakan ASCII, atau .str.normalize('NFKD') untuk menguraikan aksen sebelum membuangnya.

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     resume

Mencipta Kekunci Komposit

Dalam banyak set data, anda perlu mencipta kekunci komposit daripada beberapa lajur untuk mengenal pasti sesuatu baris secara unik bagi cantuman atau pembuangan pendua. Menggabungkan lajur rentetan yang telah dibersihkan (ruang dibuang, huruf dinormalkan kepada huruf kecil dan dinormalkan) menjadi satu rentetan kekunci memastikan padanan yang konsisten merentas sumber data apabila entiti yang sama mungkin dieja sedikit berbeza dalam 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']

Menguatkuasakan Senarai Kategori Kanonik

Selepas pembersihan, sahkan bahawa semua nilai dalam lajur teks kategori tergolong dalam set kanonik yang diketahui. Sebarang nilai yang tiada dalam set mungkin menunjukkan kategori baharu yang sah atau ralat data. Log atau tandakan nilai yang tidak diketahui untuk semakan manual dan bukannya membuangnya secara senyap, supaya tiada perkara terlepas tanpa disedari.

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)

Saluran Pemprosesan Pembersihan Teks Lengkap

Berikut ialah saluran pemprosesan pembersihan teks lengkap yang menggunakan semua teknik daripada pelajaran ini: membuang ruang kosong, menormalkan huruf besar-kecil, membetulkan singkatan, membuang aksara khas dan mengesahkan terhadap senarai kanonik. Inilah jenis fungsi boleh guna semula yang akan anda tambahkan pada mana-mana modul pengambilan data.

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)

Semakan Pantas

Uji pemahaman anda tentang penggabungan dan pembersihan lajur teks.

Ringkasan Pelajaran

Dalam pelajaran ini, anda mempelajari cara: menggabungkan lajur dengan operator + selepas menukar angka kepada rentetan, menggunakan str.cat(sep=) untuk menggabungkan dengan pembatas dan mengendalikan NaN, menggunakan peta kanonik dengan .map() untuk menormalkan label yang tidak konsisten, serta menggunakan explode() untuk mengembangkan sel bernilai senarai menjadi baris. Kuatkuasakan set kanonik untuk mengesan masalah kualiti data lebih awal. Seterusnya, kita akan mengisih DataFrames mengikut nilai lajur.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Menggabung dan Membersihkan Lajur Teks” percuma?

Ya — teks penuh “Menggabung dan Membersihkan Lajur Teks” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Pandas & NumPy Academy, tingkat taraf kepada CoddyKit PRO. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Menggabung dan Membersihkan Lajur Teks”?

Gabungkan beberapa lajur menjadi satu rentetan, buang ruang kosong dan seragamkan label kategori yang tidak konsisten. Anda berlatih Pandas & NumPy Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pandas & NumPy Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pandas & NumPy Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Menggabung dan Membersihkan Lajur Teks” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pengakses .str
  2. Memisah dan Menggantikan Rentetan
  3. Pemadanan Corak dengan Regex
  4. Menggabung dan Membersihkan Lajur Teks
← Kembali ke Pandas & NumPy Academy