Pandas & NumPy Academy · บทเรียน

แอตทริบิวต์ .str

เข้าถึงเมธอดสตริงใน Series ด้วย .str และใช้ lower(), upper(), strip() และ len() กับค่าทั้งหมด

บทเรียน 1 จาก 413 ขั้นตอน

แอตทริบิวต์ .str เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

บทนำสู่ตัวเข้าถึง .str

สตริงของ Python มีเมธอดที่มีประโยชน์มากมาย เช่น .lower(), .strip() และ .replace() แต่คุณไม่สามารถเรียกใช้เมธอดเหล่านี้โดยตรงกับ Pandas Series ที่เป็นสตริงได้ เพราะจะต้องใช้ลูป ตัวเข้าถึง .str แก้ปัญหานี้ด้วยการเปิดให้ใช้เมธอดสตริงในตัวของ Python ในรูปแบบเวกเตอร์กับ Series โดยดำเนินการกับทุกองค์ประกอบพร้อมกันโดยไม่ต้องเขียนลูป และจัดการ NaN ได้อย่างเหมาะสม (จะคืนค่า NaN สำหรับค่าที่หายไป)

import pandas as pd

names = pd.Series(['  Alice ', 'BOB', '  carol  '])

# .strip() removes leading/trailing whitespace from every element
print(names.str.strip())
# 0    Alice
# 1      BOB
# 2    carol

# .lower() lowercases every element
print(names.str.strip().str.lower())
# 0    alice
# 1      bob
# 2    carol

เมธอดสำหรับเปลี่ยนตัวพิมพ์

การใช้ตัวพิมพ์ใหญ่เล็กไม่สอดคล้องกันเป็นหนึ่งในปัญหาคุณภาพข้อมูลที่พบบ่อยที่สุด ตัวเข้าถึง .str มี .lower(), .upper(), .title() (ทำให้ตัวอักษรแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่) และ .capitalize() (ทำให้เฉพาะตัวอักษรแรกของสตริงเป็นตัวพิมพ์ใหญ่) ใช้ .lower() ก่อนการเปรียบเทียบและการดำเนินการ groupby เพื่อไม่ให้ 'NYC' และ 'nyc' ถูกมองว่าเป็นคนละกลุ่ม

import pandas as pd

df = pd.DataFrame({'city': ['new york', 'LOS ANGELES', 'Chicago', 'HOUSTON']})

df['city_lower'] = df['city'].str.lower()
df['city_title'] = df['city'].str.title()
df['city_upper'] = df['city'].str.upper()

print(df[['city_lower', 'city_title']])
#    city_lower   city_title
# 0   new york     New York
# 1  los angeles  Los Angeles
# 2    chicago      Chicago
# 3    houston      Houston

การลบช่องว่าง

ช่องว่างด้านหน้าและด้านท้ายมองไม่เห็นในหน้าการแสดงผล แต่ทำให้การเปรียบเทียบแบบตรงกันทุกประการล้มเหลวโดยไม่มีการแจ้งเตือน .str.strip() จะลบช่องว่างจากทั้งสองด้าน, .str.lstrip() จะลบจากด้านซ้ายเท่านั้น และ .str.rstrip() จะลบจากด้านขวาเท่านั้น นอกจากนี้ยังส่งอักขระที่ต้องการลบโดยเฉพาะได้ เช่น .str.strip('$') จะลบเครื่องหมายดอลลาร์

import pandas as pd

df = pd.DataFrame({'code': ['  A001  ', '$B002$', '  C003']})

print(df['code'].str.strip())     # 'A001', '$B002$', 'C003'
print(df['code'].str.strip('$ ')) # 'A001', 'B002', 'C003'

การตรวจสอบความยาวด้วย .str.len()

.str.len() จะคืนจำนวนอักขระในองค์ประกอบสตริงแต่ละรายการเป็น Series จำนวนเต็ม วิธีนี้มีประโยชน์สำหรับการตรวจสอบความถูกต้อง เช่น ตรวจว่ารหัสสินค้าเป็นอักขระ 5 ตัวเสมอ ตรวจว่าหมายเลขโทรศัพท์มีจำนวนหลักถูกต้อง หรือดูว่าช่องข้อความสั้นผิดปกติหรือไม่ เช่น มีอักขระเพียงตัวเดียวซึ่งอาจเป็นค่าตัวแทน

import pandas as pd

df = pd.DataFrame({'sku': ['A001', 'BB02', 'CCC', 'D0005', 'E1']})

df['sku_len'] = df['sku'].str.len()
print(df)

# Rows with unexpected SKU length
bad_skus = df[df['sku_len'] != 4]
print(bad_skus)
#     sku  sku_len
# 2   CCC        3
# 3  D0005        5
# 4    E1        2

การตรวจสอบคำนำหน้าและคำลงท้าย

.str.startswith() และ .str.endswith() จะคืนค่าเป็น Series แบบบูลีน ทั้งสองเป็นวิธีที่ชัดเจนที่สุดในการกรองแถวตามจุดเริ่มต้นหรือจุดสิ้นสุดของค่าสตริง เช่น เลือกรหัสคำสั่งซื้อทั้งหมดที่ขึ้นต้นด้วย 'ORD' หรือชื่อไฟล์ทั้งหมดที่ลงท้ายด้วย '.csv' นอกจากนี้ยังรับทูเพิลของสตริงเพื่อใช้ตรวจสอบคำนำหน้าหรือคำลงท้ายหลายค่าได้พร้อมกัน

import pandas as pd

df = pd.DataFrame({'file': ['data.csv', 'report.xlsx', 'backup.csv', 'config.json']})

# Filter CSV files
csv_files = df[df['file'].str.endswith('.csv')]
print(csv_files)
#         file
# 0   data.csv
# 2  backup.csv

# Multiple suffixes
spreadsheets = df[df['file'].str.endswith(('.csv', '.xlsx'))]
print(spreadsheets.shape)  # (3, 1)

.str.contains() สำหรับค้นหาสตริงย่อย

.str.contains(pattern) จะคืนค่าเป็น Series แบบบูลีน ซึ่งระบุว่าแต่ละองค์ประกอบมีรูปแบบที่กำหนดอยู่หรือไม่ โดยค่าเริ่มต้นจะรองรับนิพจน์ทั่วไป แต่คุณสามารถส่ง regex=False เพื่อค้นหาสตริงย่อยตามตัวอักษรได้ อาร์กิวเมนต์ na=False จะถือว่า NaN ไม่ตรงกับรูปแบบ แทนที่จะส่งต่อ NaN ไปยังผลลัพธ์

import pandas as pd

df = pd.DataFrame({
    'description': ['Red apple', 'Green banana', 'Red cherry', None, 'Blue grape']
})

# Find rows containing 'Red' (case-sensitive)
mask = df['description'].str.contains('Red', na=False)
print(df[mask])
#    description
# 0   Red apple
# 2  Red cherry

พฤติกรรมของ NaN ในเมธอด .str

เมื่อ Series มีค่า NaN เมธอด .str ส่วนใหญ่จะส่งต่อค่า NaN ตามค่าเริ่มต้น กล่าวคือคืนค่า NaN ในตำแหน่งที่ข้อมูลหายไปของ Series ผลลัพธ์ เมธอดที่คืนค่าบูลีน เช่น .str.contains() จะคืนค่า NaN ในตำแหน่งที่ข้อมูลหายไปโดยค่าเริ่มต้น ซึ่งอาจทำให้เกิดปัญหากับการจัดทำดัชนีแบบบูลีน ใช้ na=False เพื่อถือว่า NaN ไม่ตรงกับรูปแบบ หรือใช้ na=True เพื่อถือว่า NaN ตรงกับรูปแบบ

import pandas as pd
import numpy as np

s = pd.Series(['hello', None, 'world', np.nan])

# Default: NaN propagates
print(s.str.upper())
# 0    HELLO
# 1     None
# 2    WORLD
# 3      NaN

# contains with na=False: NaN treated as non-matching
print(s.str.contains('o', na=False))
# 0     True
# 1    False
# 2     True
# 3    False

.str.count() สำหรับนับความถี่ของรูปแบบ

.str.count(pattern) จะนับจำนวนครั้งที่รูปแบบปรากฏในองค์ประกอบสตริงแต่ละรายการ วิธีนี้มีประโยชน์สำหรับการสร้างคุณลักษณะในการประมวลผลภาษาธรรมชาติ เช่น นับว่าคำหนึ่งปรากฏกี่ครั้ง สตริงมีตัวเลขกี่หลัก หรือมีเครื่องหมายจุลภาคกี่ตัวคั่นค่าในช่องข้อมูลที่ใช้ตัวคั่น

import pandas as pd

df = pd.DataFrame({'text': ['hello world', 'foo bar baz', 'a b c d e']})

# Count number of words (spaces + 1)
df['word_count'] = df['text'].str.count(' ') + 1
print(df)
#           text  word_count
# 0  hello world           2
# 1  foo bar baz           3
# 2    a b c d e           5

การเชื่อมเมธอด .str

เนื่องจากเมธอด .str แต่ละรายการจะส่งคืน Series ใหม่ คุณจึงสามารถเชื่อมการดำเนินการกับสตริงหลายรายการไว้ในนิพจน์เดียวได้ นี่เป็นวิธีที่สะอาดที่สุดในการใช้ขั้นตอนทำความสะอาดหลายขั้นกับคอลัมน์ข้อความ ได้แก่ ตัดช่องว่าง เปลี่ยนเป็นตัวพิมพ์เล็ก และลบอักขระพิเศษ ทั้งหมดนี้อยู่ในบรรทัดเดียวที่อ่านได้ง่าย การเชื่อมจะประมวลผลจากซ้ายไปขวา โดยแต่ละขั้นจะส่งผลลัพธ์ต่อให้ขั้นถัดไป

import pandas as pd

df = pd.DataFrame({'tag': ['  Python  ', ' DATA-SCIENCE ', ' Machine_Learning !']})

df['tag_clean'] = (
    df['tag']
    .str.strip()
    .str.lower()
    .str.replace('[-_!]', ' ', regex=True)
    .str.strip()
)
print(df)
#                      tag           tag_clean
# 0            Python       python
# 1       DATA-SCIENCE     data science
# 2  Machine_Learning !  machine learning

การจัดทำดัชนีอักขระด้วย .str[]

สัญกรณ์ .str[n] จะแยกอักขระที่ตำแหน่ง n จากแต่ละสตริง ส่วน .str[start:end] จะแยกช่วงย่อยของสตริง นี่คือการจัดทำดัชนีสตริงแบบเวกเตอร์ ซึ่งมีประโยชน์สำหรับการแยกรหัสที่มีความกว้างคงที่ เช่น คำนำหน้ารหัสไปรษณีย์ ตัวเลขปีจากสตริงวันที่ หรือตัวอักษรตัวแรกของชื่อ

import pandas as pd

df = pd.DataFrame({'code': ['NYC-001', 'LAX-042', 'ORD-018']})

# Extract city code (first 3 chars)
df['city'] = df['code'].str[:3]

# Extract numeric part (chars 4 onwards)
df['num'] = df['code'].str[4:]

print(df)
#       code city num
# 0  NYC-001  NYC 001
# 1  LAX-042  LAX 042
# 2  ORD-018  ORD 018

การทำความสะอาดที่ใช้ได้จริงด้วย .str

ต่อไปนี้คือตัวอย่างกระบวนการทำความสะอาดข้อความที่สมจริงสำหรับคอลัมน์ชื่อผลิตภัณฑ์ซึ่งดึงมาจากหน้าเว็บ โดยรวมการตัดช่องว่าง การปรับรูปแบบตัวพิมพ์ การลบเครื่องหมายวรรคตอน และการยุบช่องว่าง ซึ่งเป็นลำดับการประมวลผลเบื้องต้นมาตรฐานในงาน NLP หรือการทำความสะอาดข้อมูล

import pandas as pd

df = pd.DataFrame({
    'product': ['  Apple iPhone 15!!', 'samsung GALAXY s24 ', '  Google Pixel 8  Pro  ']
})

df['product_clean'] = (
    df['product']
    .str.strip()
    .str.title()
    .str.replace('[^A-Za-z0-9 ]', '', regex=True)  # remove punctuation
    .str.replace(r'\s+', ' ', regex=True)            # collapse extra spaces
    .str.strip()
)
print(df['product_clean'].tolist())
# ['Apple Iphone 15', 'Samsung Galaxy S24', 'Google Pixel 8 Pro']

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับตัวเข้าถึง .str

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า ตัวเข้าถึง .str เปิดให้ใช้เมธอดสตริงแบบเวกเตอร์กับ Pandas Series รวมถึง lower/upper/strip สำหรับการปรับรูปแบบให้เป็นมาตรฐาน startswith/endswith/contains สำหรับการกรอง และ len/count สำหรับการวัดค่า คุณสามารถเชื่อมการเรียกใช้ .str หลายรายการเพื่อสร้างกระบวนการทำความสะอาดที่อ่านได้ง่าย เมื่อมีค่า NaN ให้ใช้ na=False ต่อไปเราจะใช้การแยกและการแทนที่สตริงเพื่อการแปลงข้อมูลขั้นสูงยิ่งขึ้น

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “แอตทริบิวต์ .str” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “แอตทริบิวต์ .str” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “แอตทริบิวต์ .str”

เข้าถึงเมธอดสตริงใน Series ด้วย .str และใช้ lower(), upper(), strip() และ len() กับค่าทั้งหมด คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “แอตทริบิวต์ .str” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม

ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แอตทริบิวต์ .str
  2. การแยกและแทนที่สตริง
  3. การจับคู่รูปแบบด้วย Regex
  4. การรวมและทำความสะอาดคอลัมน์ข้อความ
← กลับไปที่ Pandas & NumPy Academy