Python Pandas - 重複資料



重複資料是指資料集中出現多次的行。重複資料可能由於各種原因而發生,例如資料收集錯誤、重複記錄或合併資料集。識別和刪除重複項是資料預處理和資料分析中的一項基本任務,以避免出現錯誤的結果。

考慮此包含學生姓名和出生日期的示例資料集 -

學生出生日期
Rahul2017年12月1日
Raj2018年4月14日
Rahul2017年12月1日

在此資料集中,第一行和最後一行包含重複值,表明“Rahul”是重複條目。

Python Pandas 庫提供了兩種主要方法duplicated()drop_duplicates() 用於有效地管理重複資料。這些方法用於識別和清理包含重複項的資料集。

在本教程中,我們將學習如何識別重複項、檢查特定列中的重複項以及使用 Pandas 刪除它們。

識別 DataFrame 中的重複項

Pandas DataFrame.duplicated() 方法用於識別 DataFrame 中的重複行。預設情況下,它考慮所有列來識別重複項並將它們標記為 True,除了第一次出現。

此方法返回一個布林 Series,指示一行是否重複,其中 -

  • False:該行不是重複項(即,它是第一次出現)。

  • True:該行是 DataFrame 中另一行的重複項。

示例

以下是使用duplicated() 方法識別 Pandas DataFrame 重複項的基本示例。

import pandas as pd

# Sample dataset
df = pd.DataFrame({
'Name': ['Rahul', 'Raj', 'Rahul'],
'Date_of_Birth': ['01 December 2017', '14 April 2018', '01 December 2017']})

print("Original DataFrame:")
print(df)

# Find duplicates in the DataFrame
result = df.duplicated()

# Display the resultant Duplicates
print('\nResult after finding the duplicates:')
print(result)

以下是上述程式碼的輸出 -

Original DataFrame:
NameDate_of_Birth
Rahul01 December 2017
Raj14 April 2018
Rahul01 December 2017
Result after finding the duplicates: 0 False 1 False 2 True dtype: bool

在此示例中,第三行被標記為重複項,因為它與第一行具有相同的值。

識別特定列上的重複項

要根據特定列查詢重複項,請使用duplicated() 方法的subset 引數。

示例

以下示例演示瞭如何使用duplicated() 方法的subset 引數在特定列上識別重複值。

import pandas as pd

# Sample dataset
df = pd.DataFrame({
'Name': ['Rahul', 'Raj', 'Rahul', 'Karthik', 'Arya', 'Karthik'],
'Date_of_Birth': ['01 December 2017', '14 April 2018', '01 December 2017', '14 July 2000', '26 May 2000', '14 July 2000'],
'City': ['Hyderabad', 'Chennai', 'Kolkata', 'Hyderabad', 'Chennai', 'Hyderabad']})

print("Original DataFrame:")
print(df)

# Find duplicates in the DataFrame
result = df.duplicated(subset=['Name', 'City'])

# Display the resultant Duplicates
print('\nResult after finding the duplicates:')
print(result) 

以下是上述程式碼的輸出 -

Original DataFrame:
NameDate_of_BirthCity
0Rahul01 December 2017Hyderabad
1Raj14 April 2018Chennai
2Rahul01 December 2017Kolkata
3Karthik14 July 2000Hyderabad
4Arya26 May 2000Chennai
5Karthik14 July 2000Hyderabad
Result after finding the duplicates: 0 False 1 False 2 False 3 False 4 False 5 True dtype: bool

刪除重複項

drop_duplicates() 方法用於從 DataFrame 中刪除重複行。預設情況下,它考慮所有列並保留每個重複行的第一次出現,同時刪除其餘部分。

示例

此示例使用drop_duplicates() 方法從 Pandas DataFrame 中刪除重複行。

import pandas as pd

# Sample dataset
df = pd.DataFrame({
'Name': ['Rahul', 'Raj', 'Rahul', 'Karthik', 'Arya', 'Karthik'],
'Date_of_Birth': ['01 December 2017', '14 April 2018', '01 December 2017', '14 July 2000', '26 May 2000', '14 July 2000'],
'City': ['Hyderabad', 'Chennai', 'Kolkata', 'Hyderabad', 'Chennai', 'Hyderabad']})

print("Original DataFrame:")
print(df)

# Drop duplicates in the DataFrame

result = df.drop_duplicates()

# Display the resultant Duplicates
print('\nResult after finding the duplicates:')
print(result) 

以下是上述程式碼的輸出 -

Original DataFrame:
NameDate_of_BirthCity
0Rahul01 December 2017Hyderabad
1Raj14 April 2018Chennai
2Rahul01 December 2017Kolkata
3Karthik14 July 2000Hyderabad
4Arya26 May 2000Chennai
5Karthik14 July 2000Hyderabad
Result after finding the duplicates:
NameDate_of_BirthCity
0Rahul01 December 2017Hyderabad
1Raj14 April 2018Chennai
2Rahul01 December 2017Kolkata
3Karthik14 July 2000Hyderabad
4Arya26 May 2000Chennai

刪除特定列中的重複項

您還可以使用drop_duplicates() 方法的subset 引數根據特定列刪除重複項。

示例

此示例使用drop_duplicates() 方法的subset 引數根據特定列刪除 DataFrame 的重複資料。

import pandas as pd

# Sample dataset
df = pd.DataFrame({
'Name': ['Rahul', 'Raj', 'Rahul', 'Karthik', 'Arya', 'Karthik'],
'Date_of_Birth': ['01 December 2017', '14 April 2018', '01 December 2017', '14 July 2000', '26 May 2000', '14 July 2000'],
'City': ['Hyderabad', 'Chennai', 'Kolkata', 'Hyderabad', 'Chennai', 'Hyderabad']})

print("Original DataFrame:")
print(df)

# Drop duplicates in the DataFrame
result = df.drop_duplicates(subset=['Date_of_Birth'])

# Display the resultant Duplicates
print('\nResult after finding the duplicates:')
print(result) 

以下是上述程式碼的輸出 -

Original DataFrame:
NameDate_of_BirthCity
0Rahul01 December 2017Hyderabad
1Raj14 April 2018Chennai
2Rahul01 December 2017Kolkata
3Karthik14 July 2000Hyderabad
4Arya26 May 2000Chennai
5Karthik14 July 2000Hyderabad
Result after finding the duplicates:
NameDate_of_BirthCity
0Rahul01 December 2017Hyderabad
1Raj14 April 2018Chennai
3Karthik14 July 2000Hyderabad
4Arya26 May 2000Chennai
廣告