Python Pandas - 重复标签



在 Pandas 中,Series 和 DataFrames 中的行和列标签都不需要唯一。如果数据集包含重复的索引标签,则我们将其称为重复标签,这可能导致某些操作(例如过滤、聚合或切片)出现意外结果。

Pandas 提供了几种方法来检测、管理和处理此类重复标签。在本教程中,我们将学习各种方法来检测、管理和处理 Pandas 中的重复标签。

检查唯一标签

要检查 DataFrame 的行或列标签是否唯一,可以使用 pandas 的 Index.is_unique 属性。如果它返回 False,则表示您的索引中存在重复标签。

示例

以下示例使用 pandas 的 Index.is_unique 属性来检查 DataFrame 的唯一标签。

import pandas as pd

# Creating a DataFrame with duplicate row labels
df = pd.DataFrame({"A": [0, 1, 2], 'B': [4, 1, 1]}, index=["a", "a", "b"])

# Display the Original DataFrame
print("Original DataFrame:")
print(df)

# Check if the row index is unique
print("Is row index is unique:",df.index.is_unique)  

# Check if the column index is unique
print('Is column index is unique:',df.columns.is_unique) 

以下是上述代码的输出 -

Original DataFrame:
AB
a04
a11
b21
Is row index is unique: False Is column index is unique: True

检测重复标签

Index.duplicated() 方法用于检测 Pandas 对象的重复标签,它返回一个布尔数组,指示索引中的每个标签是否重复。

示例

以下示例使用 Index.duplicated() 方法来检测 Pandas DataFrame 的重复行标签。

import pandas as pd

# Creating a DataFrame with duplicate row labels
df = pd.DataFrame({"A": [0, 1, 2], 'B': [4, 1, 1]}, index=["a", "a", "b"])

# Display the Original DataFrame
print("Original DataFrame:")
print(df)

# Identify duplicated row labels
print('Duplicated Row Labels:', df.index.duplicated())

以下是上述代码的输出 -

Original DataFrame:
AB
a04
a11
b21
Duplicated Row Labels: [False True False]

拒绝重复标签

Pandas 提供了拒绝重复标签的功能。默认情况下,pandas 允许重复标签,但您可以通过设置 .set_flags(allows_duplicate_labels=False) 来禁止它们。这可以应用于 Series 和 DataFrames。如果 pandas 检测到重复标签,它将引发 DuplicateLabelError

示例

以下示例演示了创建不允许重复标签的 Pandas Series 对象。

import pandas as pd

# Create a Series with duplicate labels and disallow duplicates
try:
    pd.Series([0, 1, 2], index=["a", "b", "b"]).set_flags(allows_duplicate_labels=False)
except pd.errors.DuplicateLabelError as e:
    print(e)

以下是上述代码的输出 -

Index has duplicates.

      positions
label          
b        [1, 2]
广告