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
广告