การจัดการค่าที่ซ้ำกันใน Pandas DataFrame

การจัดการค่าที่ซ้ำกันใน Pandas DataFrame

บทนำ

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

การระบุค่าที่ซ้ำกัน

ขั้นตอนแรกในการจัดการกับค่าที่ซ้ำกันคือการระบุค่าเหล่านั้น การระบุค่าที่ซ้ำกันเป็นขั้นตอนสำคัญในการล้างข้อมูล Pandas มีหลายวิธีในการระบุค่าที่ซ้ำกันภายในดาต้าเฟรม ในหัวข้อนี้เราจะกล่าวถึง duplicated() และฟังก์ชั่น value_counts() ฟังก์ชันสำหรับการระบุค่าที่ซ้ำกัน

กสิณ ซ้ำ ()

พื้นที่ duplicated() ฟังก์ชันเป็นฟังก์ชันไลบรารีของ Pandas ที่ตรวจสอบแถวที่ซ้ำกันใน DataFrame ผลลัพธ์ของ duplicated() ฟังก์ชันเป็นอนุกรมบูลีนที่มีความยาวเท่ากันกับอินพุต DataFrame โดยที่แต่ละองค์ประกอบระบุว่าแถวที่เกี่ยวข้องนั้นซ้ำกันหรือไม่

ลองพิจารณาตัวอย่างง่ายๆ ของ duplicated() ฟังก์ชั่น:

import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) df_duplicates = df.duplicated()
print(df_duplicates)

Output:

0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool

ในตัวอย่างข้างต้น เราสร้าง DataFrame ที่มีชื่อของนักเรียนและคะแนนรวมของนักเรียน เราเรียก duplicated() บน DataFrame ซึ่งสร้างชุดบูลีนด้วย False แสดงถึงคุณค่าที่เป็นเอกลักษณ์และ True แทนค่าที่ซ้ำกัน

ในตัวอย่างนี้ การเกิดขึ้นครั้งแรกของค่าจะถือว่าไม่ซ้ำกัน อย่างไรก็ตาม จะเกิดอะไรขึ้นถ้าเราต้องการให้ค่าสุดท้ายถือว่าไม่ซ้ำกัน และเราไม่ต้องการพิจารณาคอลัมน์ทั้งหมดเมื่อระบุค่าที่ซ้ำกัน ที่นี่เราสามารถปรับเปลี่ยน duplicated() ฟังก์ชันโดยการเปลี่ยนค่าพารามิเตอร์

พารามิเตอร์: Subset และ Keep

พื้นที่ duplicated() ฟังก์ชันนำเสนอตัวเลือกการปรับแต่งผ่านพารามิเตอร์เสริม มีพารามิเตอร์สองตัวตามที่อธิบายไว้ด้านล่าง:

  • subset: พารามิเตอร์นี้ช่วยให้เราสามารถระบุชุดย่อยของคอลัมน์ที่ต้องพิจารณาระหว่างการตรวจหารายการซ้ำ ชุดย่อยถูกตั้งค่าเป็น None ตามค่าเริ่มต้น หมายความว่าแต่ละคอลัมน์ใน DataFrame ได้รับการพิจารณา ในการระบุชื่อคอลัมน์ เราสามารถจัดเตรียมรายการชื่อคอลัมน์ให้กับชุดย่อยได้

    นี่คือตัวอย่างการใช้พารามิเตอร์เซ็ตย่อย:

    
    df_duplicates = df.duplicated(subset=['StudentName'])
    

    Output:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: ตัวเลือกนี้ช่วยให้เราสามารถเลือกอินสแตนซ์ของแถวที่ซ้ำกันที่ควรทำเครื่องหมายว่าซ้ำกัน ค่าที่เป็นไปได้สำหรับการเก็บคือ:

    • "first": นี่คือค่าเริ่มต้นสำหรับ keep ตัวเลือก. โดยจะระบุรายการที่ซ้ำกันทั้งหมด ยกเว้นการเกิดขึ้นครั้งแรก โดยพิจารณาว่าค่าแรกไม่ซ้ำกัน
    • "last": ตัวเลือกนี้ระบุการเกิดขึ้นครั้งล่าสุดเป็นค่าเฉพาะ รายการอื่นทั้งหมดจะถือว่าซ้ำกัน
    • False: ตัวเลือกนี้ระบุแต่ละอินสแตนซ์เป็นค่าที่ซ้ำกัน

นี่คือตัวอย่างของการใช้ keep พารามิเตอร์:


df_duplicates = df.duplicated(keep='last')
print(df_duplicates)

Output:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
เห็นภาพค่าที่ซ้ำกัน

พื้นที่ value_counts() ฟังก์ชันเป็นแนวทางที่สองในการระบุรายการที่ซ้ำกัน เดอะ value_counts() ฟังก์ชันนับจำนวนครั้งที่แต่ละค่าที่ไม่ซ้ำกันปรากฏในคอลัมน์ โดยใช้ value_counts() ฟังก์ชันไปยังคอลัมน์เฉพาะ ความถี่ของแต่ละค่าสามารถมองเห็นได้

นี่คือตัวอย่างของการใช้ value_counts() ฟังก์ชั่น:

import matplotlib.pyplot as plt
import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) name_counts = df['StudentName'].value_counts()
print(name_counts)

Output:

Mark 2
Ali 1
Bob 1
John 1
Johny 1
Name: StudentName, dtype: int64

ตอนนี้ลองนึกภาพค่าที่ซ้ำกันด้วยกราฟแท่ง เราสามารถแสดงภาพความถี่ของค่าที่ซ้ำกันได้อย่างมีประสิทธิภาพโดยใช้แผนภูมิแท่ง


name_counts.plot(kind='bar')
plt.xlabel('Student Name')
plt.ylabel('Frequency')
plt.title('Duplicate Name Frequencies')
plt.show()

ค่าที่ซ้ำกัน

การจัดการค่าที่ซ้ำกัน

หลังจากระบุค่าที่ซ้ำกันแล้วก็ถึงเวลาแก้ไข ในส่วนนี้ เราจะสำรวจกลยุทธ์ต่างๆ สำหรับการลบและอัปเดตค่าที่ซ้ำกันโดยใช้หมีแพนด้า drop_duplicates() และ replace() ฟังก์ชั่น. นอกจากนี้ เราจะหารือเกี่ยวกับการรวมข้อมูลที่มีค่าซ้ำกันโดยใช้ groupby() ฟังก์ชัน

การลบค่าที่ซ้ำกัน

วิธีการทั่วไปในการจัดการรายการที่ซ้ำกันคือการลบออกจาก DataFrame ในการกำจัดระเบียนที่ซ้ำกันออกจาก DataFrame เราจะใช้ drop_duplicates() การทำงาน. ตามค่าเริ่มต้น ฟังก์ชันนี้จะเก็บอินสแตนซ์แรกของแต่ละแถวที่ซ้ำกัน และลบเหตุการณ์ที่ตามมา โดยจะระบุค่าที่ซ้ำกันตามค่าของคอลัมน์ทั้งหมด อย่างไรก็ตาม เราสามารถระบุคอลัมน์ที่จะพิจารณาโดยใช้พารามิเตอร์เซ็ตย่อย

ไวยากรณ์ของ drop_duplicates() โดยมีค่าเริ่มต้นในพารามิเตอร์ดังนี้

dataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

พื้นที่ subset และ keep พารามิเตอร์มีคำอธิบายเช่นเดียวกับใน duplicates(). หากเราตั้งค่าพารามิเตอร์ที่สาม inplace ไปยัง Trueการแก้ไขทั้งหมดจะดำเนินการโดยตรงบน DataFrame ดั้งเดิม ส่งผลให้เมธอดกลับมา None และ DataFrame เดิมที่ถูกแก้ไข โดยค่าเริ่มต้น, inplace is False.

นี่คือตัวอย่างของ drop_duplicates() ฟังก์ชั่น:


df.drop_duplicates(keep='last', inplace=True)
print(df)

Output:

 StudentName Score
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!

ในตัวอย่างข้างต้น รายการแรกถูกลบเนื่องจากเป็นรายการที่ซ้ำกัน

แทนที่หรืออัปเดตค่าที่ซ้ำกัน

วิธีที่สองในการจัดการรายการที่ซ้ำกันนั้นเกี่ยวข้องกับการแทนที่ค่าโดยใช้ Pandas replace() ฟังก์ชัน replace() ฟังก์ชันช่วยให้เราสามารถแทนที่ค่าหรือรูปแบบเฉพาะใน DataFrame ด้วยค่าใหม่ โดยค่าเริ่มต้น จะแทนที่อินสแตนซ์ทั้งหมดของค่า อย่างไรก็ตาม เมื่อใช้พารามิเตอร์ limit เราสามารถจำกัดจำนวนการแทนที่ได้

นี่คือตัวอย่างของการใช้ replace() ฟังก์ชั่น:


df['StudentName'].replace('Mark', 'Max', limit=1, inplace=True)
print(df)

Output:

 StudentName Score
0 Max 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

ที่นี่ ใช้ขีดจำกัดเพื่อแทนที่ค่าแรก ถ้าเราต้องการแทนที่เหตุการณ์ล่าสุดล่ะ ในกรณีนี้เราจะรวม duplicated() และ replace() ฟังก์ชั่น. โดยใช้ duplicated()เราจะระบุตัวอย่างสุดท้ายของแต่ละค่าที่ซ้ำกัน รับหมายเลขแถวโดยใช้ loc ฟังก์ชัน แล้วแทนที่ด้วยฟังก์ชัน replace() การทำงาน. นี่คือตัวอย่างการใช้ duplicated() และ replace() ทำหน้าที่ร่วมกัน


last_occurrences = df.duplicated(subset='StudentName', keep='first') last_occurrences_rows = df[last_occurrences] df.loc[last_occurrences, 'StudentName'] = df.loc[last_occurrences, 'StudentName'].replace('Mark', 'Max') print(df)

Output:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Max 45

ฟังก์ชันแบบกำหนดเองสำหรับการแทนที่ที่ซับซ้อน

ในบางกรณี การจัดการค่าที่ซ้ำกันจำเป็นต้องมีการแทนที่ที่ซับซ้อนกว่าการลบหรืออัปเดตค่าเหล่านั้น ฟังก์ชันแบบกำหนดเองช่วยให้เราสร้างกฎการเปลี่ยนเฉพาะที่เหมาะกับความต้องการของเรา โดยใช้หมีแพนด้า apply() ฟังก์ชัน เราสามารถใช้ฟังก์ชันที่กำหนดเองกับข้อมูลของเราได้

ตัวอย่างเช่น สมมติว่าคอลัมน์ “StudentName” มีชื่อซ้ำกัน เป้าหมายของเราคือการแทนที่รายการที่ซ้ำกันโดยใช้ฟังก์ชันแบบกำหนดเองที่เพิ่มตัวเลขต่อท้ายค่าที่ซ้ำกัน ทำให้ไม่ซ้ำกัน


def add_number(name, counts): if name in counts: counts[name] += 1 return f'{name}_{counts[name]}' else: counts[name] = 0 return name name_counts = {} df['is_duplicate'] = df.duplicated('StudentName', keep=False)
df['StudentName'] = df.apply(lambda x: add_number(x['StudentName'], name_counts) if x['is_duplicate'] else x['StudentName'], axis=1)
df.drop('is_duplicate', axis=1, inplace=True)
print(df)

Output:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark_1 45

รวมข้อมูลด้วยค่าที่ซ้ำกัน

ข้อมูลที่มีค่าที่ซ้ำกันสามารถรวมเข้าด้วยกันเพื่อสรุปและรับข้อมูลเชิงลึกจากข้อมูล หมีแพนด้า groupby() ฟังก์ชันช่วยให้คุณสามารถรวมข้อมูลด้วยค่าที่ซ้ำกัน โดยใช้ groupby() คุณสามารถจัดกลุ่มหนึ่งคอลัมน์ขึ้นไปและคำนวณค่าเฉลี่ย ค่ามัธยฐาน หรือผลรวมของคอลัมน์อื่นสำหรับแต่ละกลุ่ม

นี่คือตัวอย่างของการใช้ groupby() วิธี:


grouped = df.groupby(['StudentName']) df_aggregated = grouped.sum()
print(df_aggregated)

Output:

 Score
StudentName Ali 65
Bob 76
John 44
Johny 39
Mark 90

เทคนิคขั้นสูง

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

รายการที่ซ้ำกันเลือน

Fuzzy duplicates คือเรกคอร์ดที่ไม่ตรงกันทั้งหมดแต่คล้ายกัน และอาจเกิดขึ้นได้จากหลายสาเหตุ รวมถึงข้อผิดพลาดในการป้อนข้อมูล การสะกดผิด และรูปแบบที่แตกต่างกัน เราจะใช้ fuzzywuzzy ไลบรารี Python เพื่อระบุรายการที่ซ้ำกันโดยใช้การจับคู่ความคล้ายคลึงกันของสตริง

นี่คือตัวอย่างการจัดการค่าฟัซซี:

import pandas as pd
from fuzzywuzzy import fuzz def find_fuzzy_duplicates(dataframe, column, threshold): duplicates = [] for i in range(len(dataframe)): for j in range(i+1, len(dataframe)): similarity = fuzz.ratio(dataframe[column][i], dataframe[column][j]) if similarity >= threshold: duplicates.append(dataframe.iloc[[i, j]]) if duplicates: duplicates_df = pd.concat(duplicates) return duplicates_df else: return pd.DataFrame() data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) threshold = 70 fuzzy_duplicates = find_fuzzy_duplicates(df, 'StudentName', threshold)
print("Fuzzy duplicates:")
print(fuzzy_duplicates.to_string(index=False))

ในตัวอย่างนี้ เราสร้างฟังก์ชันแบบกำหนดเอง find_fuzzy_duplicates ที่ใช้ DataFrame ชื่อคอลัมน์ และเกณฑ์ความคล้ายคลึงกันเป็นอินพุต ฟังก์ชันวนซ้ำแต่ละแถวใน DataFrame และเปรียบเทียบกับแถวถัดไปโดยใช้ fuzz.ratio วิธีการจาก fuzzywuzzy ห้องสมุด. ถ้าคะแนนความคล้ายคลึงกันมากกว่าหรือเท่ากับเกณฑ์ แถวที่ซ้ำกันจะถูกเพิ่มลงในรายการ สุดท้าย ฟังก์ชันจะส่งคืน DataFrame ที่มีรายการที่ซ้ำกันแบบคลุมเครือ

Output:

Fuzzy duplicates:
StudentName Score Mark 45 Mark 45 John 44 Johny 39

ในตัวอย่างข้างต้น รายชื่อที่ซ้ำกันแบบคลุมเครือจะถูกระบุในคอลัมน์ “StudentName” ฟังก์ชัน 'find_fuzzy_duplicates' จะเปรียบเทียบสตริงแต่ละคู่โดยใช้ fuzzywuzzy ห้องสมุด fuzz.ratio ฟังก์ชันซึ่งคำนวณคะแนนความคล้ายคลึงกันตามระยะทาง Levenshtein เราได้กำหนดเกณฑ์ไว้ที่ 70 ซึ่งหมายความว่าชื่อใด ๆ ที่มีอัตราส่วนการจับคู่มากกว่า 70 จะถือว่าเป็นค่าที่ไม่ชัดเจน หลังจากระบุค่าฟัซซีแล้ว เราสามารถจัดการค่าเหล่านี้ได้โดยใช้วิธีที่ระบุไว้ในหัวข้อ “การจัดการรายการที่ซ้ำกัน”

การจัดการสำเนาข้อมูลอนุกรมเวลา

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

  • วางรายการที่ซ้ำกัน: ในวิธีนี้ เราจะลบแถวที่เหมือนกันออกโดยใช้ drop_duplicates ฟังก์ชั่นใน Pandas
  • การประทับเวลาซ้ำที่มีค่าต่างกัน: ถ้าเรามีเวลาประทับเท่ากันแต่ค่าต่างกัน เราสามารถรวมข้อมูลและรับข้อมูลเชิงลึกเพิ่มเติมโดยใช้ groupby()หรือเราสามารถเลือกค่าล่าสุดและนำค่าอื่นออกได้ drop_duplicates() กับ keep ตั้งค่าพารามิเตอร์เป็น 'ล่าสุด'

การจัดการค่าดัชนีที่ซ้ำกัน

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

ตามความหมายของชื่อไฟล์ reset_index() ฟังก์ชันใน Pandas ใช้เพื่อรีเซ็ตดัชนีของ DataFrame เมื่อสมัคร reset_index() ฟังก์ชัน ดัชนีปัจจุบันจะถูกละทิ้งโดยอัตโนมัติ ซึ่งหมายความว่าค่าดัชนีเริ่มต้นจะหายไป โดยระบุว่า drop พารามิเตอร์เป็น False ใน reset_index() เราสามารถคงค่าดัชนีเดิมไว้ได้ในขณะที่รีเซ็ตดัชนี

นี่คือตัวอย่างการใช้ reset_index():

import pandas as pd data = { 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data, index=['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark']) df.reset_index(inplace=True)
print(df)

Output:

 index Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

ปฏิบัติที่ดีที่สุด

  • เข้าใจธรรมชาติของข้อมูลที่ซ้ำกัน: ก่อนดำเนินการใดๆ สิ่งสำคัญคือต้องเข้าใจว่าเหตุใดจึงมีค่าที่ซ้ำกันและแสดงถึงอะไร ระบุสาเหตุที่แท้จริงแล้วกำหนดขั้นตอนที่เหมาะสมในการจัดการกับปัญหาเหล่านั้น

  • เลือกวิธีที่เหมาะสมสำหรับการจัดการสำเนา: ตามที่กล่าวไว้ในส่วนก่อนหน้า มีหลายวิธีในการจัดการกับรายการที่ซ้ำกัน วิธีที่คุณเลือกขึ้นอยู่กับลักษณะของข้อมูลและการวิเคราะห์ที่คุณต้องการดำเนินการ

  • บันทึกแนวทาง: จำเป็นอย่างยิ่งที่จะต้องจัดทำเอกสารขั้นตอนการตรวจหาค่าที่ซ้ำกันและจัดการกับค่าเหล่านั้น เพื่อให้ผู้อื่นเข้าใจกระบวนการคิด

  • ข้อควรระวังในการออกกำลังกาย: เมื่อใดก็ตามที่เราลบหรือแก้ไขข้อมูล เราต้องแน่ใจว่าการกำจัดข้อมูลที่ซ้ำกันจะไม่ทำให้เกิดข้อผิดพลาดหรืออคติในการวิเคราะห์ ทำการทดสอบสุขภาพจิตและตรวจสอบผลลัพธ์ของแต่ละการกระทำ

  • รักษาข้อมูลต้นฉบับ: ก่อนดำเนินการใดๆ กับข้อมูล ให้สร้างสำเนาสำรองของข้อมูลต้นฉบับ

  • ป้องกันการทำซ้ำในอนาคต: ด�ำเนินมาตรการป้องกันการซ้ำซ้อนที่จะเกิดขึ้นอีกในอนาคต ซึ่งอาจรวมถึงการตรวจสอบความถูกต้องของข้อมูลระหว่างการป้อนข้อมูล รูทีนการล้างข้อมูล หรือข้อจำกัดของฐานข้อมูลเพื่อบังคับใช้เอกลักษณ์

ข้อคิด

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

ประทับเวลา:

เพิ่มเติมจาก สแต็ค