แอตทริบิวต์ .str
เข้าถึงเมธอดสตริงใน Series ด้วย .str และใช้ lower(), upper(), strip() และ len() กับค่าทั้งหมด
แอตทริบิวต์ .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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ