在大型数据集中,我们经常会遇到表格中的重复条目。这些重复条目会影响我们的分析并扭曲结果。
Pandas 提供了几种方法来查找和删除 DataFrame 中的重复条目。
查找重复条目
我们可以使用 `duplicated()` 方法在 DataFrame 中查找重复条目。如果一行重复,它将返回 `True`,否则返回 `False`。
import pandas as pd
# create dataframe
data = {
'Name': ['John', 'Anna', 'John', 'Anna', 'John'],
'Age': [28, 24, 28, 24, 19],
'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# check for duplicate entries
print(df.duplicated())
输出
0 False 1 False 2 True 3 True 4 False dtype: bool
在上面的示例中,我们使用 `duplicated()` 方法检查了 df 中的重复条目。它返回一个包含布尔值的系列,指示条目是否重复。
在这里,我们在第三行和第四行得到了 `True`,因为它们分别是第一行和第二行的重复项。
示例:根据列查找重复项
默认情况下,`duplicated()` 会考虑所有列。要根据特定列查找重复项,我们可以将它们作为列表传递给 `duplicated()` 函数。
import pandas as pd
# create dataframe
data = {
'Name': ['John', 'Anna', 'Johnny', 'Anna', 'John'],
'Age': [28, 24, 28, 24, 19],
'City': ['New York', 'Las Vegas', 'New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# check for duplicate entries in columns Name and Age
print(df.duplicated(subset=['Name', 'Age']))
输出
0 False 1 False 2 False 3 True 4 False dtype: bool
在此示例中,我们仅根据 `Name` 和 `Age` 列检查了重复条目。
如果您查看 `Name` 和 `Age` 列,第四行是第二行的重复项。因此,第四行的布尔值为 `True`。
删除重复条目
我们可以使用 `drop_duplicates()` 方法在 Pandas 中删除重复条目。例如:
import pandas as pd
# create dataframe
data = {
'Name': ['John', 'Anna', 'John', 'Anna', 'John'],
'Age': [28, 24, 28, 24, 19],
'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# remove duplicates
df.drop_duplicates(inplace=True)
print(df)
输出
Name Age City 0 John 28 New York 1 Anna 24 Los Angeles 4 John 19 Chicago
在此示例中,我们使用 `drop_duplicates()` 从 df 中删除了重复条目。
此处,`inplace=True` 指定更改将在原始 DataFrame 中进行。
请注意,`drop_duplicates()` 函数默认会保留第一个重复的条目并删除最后一个。在这里,第一行和第二行被保留,而第三行和第四行被删除。
要保留最后一个条目,我们可以传递 `keep='last'` 参数。例如:
import pandas as pd
# create dataframe
data = {
'Name': ['John', 'Anna', 'John', 'Anna', 'John'],
'Age': [28, 24, 28, 24, 19],
'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# remove duplicates, keep last entries
df.drop_duplicates(keep='last', inplace=True)
print(df)
输出
Name Age City 2 John 28 New York 3 Anna 24 Los Angeles 4 John 19 Chicago