Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python – แทนที่ค่าใน DataFrame ด้วยค่าจาก DataFrame อื่น

บทความนี้สาธิตวิธีแทนที่ค่าใน 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 ด้วย จะถูกแทนที่ทั้งหมด

แนวทางปลอดภัยกว่า

# แทนที่เฉพาะคอลัมน์ Car
mask = dataFrame2['Car'] == 'Lexus'
dataFrame2.loc[mask, 'Car'] = 'Audi'

# หรือใช้ map()
dataFrame2['Car'] = dataFrame2['Car'].map({'Lexus': 'Audi'}).fillna(dataFrame2['Car'])