บทความนี้สาธิตวิธีแทนที่ค่าใน DataFrame หนึ่งด้วยค่าจาก DataFrame อีกตัวหนึ่ง โดยใช้เมธอด replace()
โค้ดตัวอย่าง
import pandas as pd
# DataFrame 1: แหล่งค่าที่จะนำมาแทนที่
dataFrame1 = pd.DataFrame({
"Car": ["Audi", "Lamborghini"],
"Place": ["US", "UK"],
"Units": [200, 500]
})
# DataFrame 2: เป้าหมายที่จะถูกแทนที่ค่า
dataFrame2 = pd.DataFrame({
"Car": ["BMW", "Lexus"],
"Place": ["India", "Australia"],
"Units": [800, 1000]
})
print("DataFrame 1 (Source):")
print(dataFrame1)
print("\nDataFrame 2 (Target):")
print(dataFrame2)
# ดึงค่าที่จะใช้แทนที่
# จาก DataFrame1: Car ตัวแรก (Index 0) = 'Audi'
# จาก DataFrame2: Car ตัวที่สอง (Index 1) = 'Lexus' → จะถูกแทนที่
old_value = dataFrame2['Car'][1] # 'Lexus'
new_value = dataFrame1['Car'][0] # 'Audi'
print(f"\nแทนที่ '{old_value}' ด้วย '{new_value}'")
# แทนที่ค่าใน DataFrame2
dataFrame2 = dataFrame2.replace(old_value, new_value)
print("\nDataFrame 2 หลังแทนที่:")
print(dataFrame2)
ผลลัพธ์
DataFrame 1 (Source):
Car Place Units
0 Audi US 200
1 Lamborghini UK 500
DataFrame 2 (Target):
Car Place Units
0 BMW India 800
1 Lexus Australia 1000
แทนที่ 'Lexus' ด้วย 'Audi'
DataFrame 2 หลังแทนที่:
Car Place Units
0 BMW India 800
1 Audi Australia 1000
การใช้งาน replace() แบบละเอียด
# แทนที่ค่าเฉพาะคอลัมน์
df['Car'] = df['Car'].replace('Lexus', 'Audi')
# แทนที่หลายค่าพร้อมกัน (Dictionary Mapping)
df.replace({'Lexus': 'Audi', 'BMW': 'Mercedes'}, inplace=True)
# แทนที่ด้วย Regex
df.replace(r'^L.*', 'Lexus_Group', regex=True)
# แทนที่ NaN
df.replace({np.nan: 0}) # หรือ df.fillna(0)
ข้อควรระวัง
⚠️ replace() แทนที่ทุกที่ที่เจอค่านั้น - ไม่ได้จำกัดเฉพาะคอลัมน์หรือแถวที่ระบุ
เช่น ถ้ามี 'Lexus' ในคอลัมน์ Place ด้วย จะถูกแทนที่ทั้งหมด
เช่น ถ้ามี 'Lexus' ในคอลัมน์ Place ด้วย จะถูกแทนที่ทั้งหมด
แนวทางปลอดภัยกว่า
# แทนที่เฉพาะคอลัมน์ Car
mask = dataFrame2['Car'] == 'Lexus'
dataFrame2.loc[mask, 'Car'] = 'Audi'
# หรือใช้ map()
dataFrame2['Car'] = dataFrame2['Car'].map({'Lexus': 'Audi'}).fillna(dataFrame2['Car'])