如果你想在一个DataFrame中根据所有或选定的列找到重复的行,可以使用pandas.dataframe.diplicated()函数。在 数据科学 中,有时候,你会得到一个混乱的数据集。例如,你可能不得不处理重复的数据,这将使你的分析出现偏差。

Pandas的重复行

要在 Pandas DataFrame 找到 重复的 ,可以使用**pd.df.diplicated()**函数。**Pandas.DataFrame.diplicated()**是一个库函数,可以根据所有或特定的列找到重复的行。 pd.df.diplicated() 函数为每条重复的行返回一个布尔系列,其值为

pandas.dataframe.diplicated()函数的语法如下。

DataFrame.duplicated(subset=None, keep='first')
  • subset :
  • 单列或多列标签应被用于重复检查。如果你不提供这些参数,那么所有的列都将被检查以找到重复的行。
  • keep:
  • 它表示出现的情况,应该被标记为重复的。它的值可以是{"第一个","最后一个",假的}, 默认值是 "第一个"。
  • 第一个。除了第一次出现外,所有重复的行都将被标记为 "真"。
  • 最后一个。除了最后一次出现外,所有重复的行都将被标记为 "真"。
  • 错。所有的重复都将被标记为真。
  • series = [('Stranger Things', 3, 'Millie'), ('Game of Thrones', 8, 'Emilia'), ('La Casa De Papel', 4, 'Sergio'), ('Westworld', 3, 'Evan Rachel'), ('Stranger Things', 3, 'Millie'), ('La Casa De Papel', 4, 'Sergio')] # Create a DataFrame object dfObj = pd.DataFrame(series, columns=['Name', 'Seasons', 'Actor']) print(dfObj)
     python3 app.py
                   Name  Seasons        Actor
    0   Stranger Things        3       Millie
    1   Game of Thrones        8       Emilia
    2  La Casa De Papel        4       Sergio
    3         Westworld        3  Evan Rachel
    4   Stranger Things        3       Millie
    5  La Casa De Papel        4       Sergio
    

    正如你所看到的,上面的数据框架包含重复的行。

    基于所有的列来查找重复的行。

    如果我们想找到并选择重复的,所有的行都基于所有的列,调用Daraframe.duplicate(),不需要任何子集 参数。它将返回每个重复的行的布尔系列,除了它们的第一次出现外,都是Truekeep参数的默认值是 "第一")。然后将这个布尔系列传递给Dataframe的[]操作符来选择重复的行。

    请看下面的代码。

    # app.py
    import pandas as pd
    series = [('Stranger Things', 3, 'Millie'),
              ('Game of Thrones', 8, 'Emilia'), ('La Casa De Papel', 4, 'Sergio'),
              ('Westworld', 3, 'Evan Rachel'), ('Stranger Things', 3, 'Millie'),
             ('La Casa De Papel', 4, 'Sergio')]
    # Create a DataFrame object
    dfObj = pd.DataFrame(series, columns=['Name', 'Seasons', 'Actor'])
    # Find a duplicate rows
    duplicateDFRow = dfObj[dfObj.duplicated()]
    print(duplicateDFRow)
    
    python3 app.py
                   Name  Seasons   Actor
    4   Stranger Things        3  Millie
    5  La Casa De Papel        4  Sergio
    

    这里所有重复的行都被返回,除了第一次出现的,因为keep参数的默认值是 "第一"。

    如果我们想选择所有重复的行,除了最后出现的行,我们必须传递一个keep参数为 "**last"。**请看下面的代码。

    # app.py
    import pandas as pd
    series = [('Stranger Things', 3, 'Millie'),
              ('Game of Thrones', 8, 'Emilia'), ('La Casa De Papel', 4, 'Sergio'),
              ('Westworld', 3, 'Evan Rachel'), ('Stranger Things', 3, 'Millie'),
             ('La Casa De Papel', 4, 'Sergio')]
    # Create a DataFrame object
    dfObj = pd.DataFrame(series, columns=['Name', 'Seasons', 'Actor'])
    # Find a duplicate rows
    duplicateDFRow = dfObj[dfObj.duplicated(keep='last')]
    print(duplicateDFRow)
    
    pyt python3 app.py
                   Name  Seasons   Actor
    0   Stranger Things        3  Millie
    2  La Casa De Papel        4  Sergio
    

    根据选定的列查找重复的行。

    如果我们想比较行并根据选定的列找到重复的行,我们应该在**Dataframe.duplicate()**函数的subset参数中传递列名列表。然后,它将只根据这些传递的列选择并返回重复的行。

    例如,让我们根据一个单列来查找和选择行。

    # app.py
    import pandas as pd
    series = [('Stranger Things', 3, 'Millie'),
              ('Game of Thrones', 8, 'Emilia'), ('La Casa De Papel', 4, 'Sergio'),
              ('Westworld', 3, 'Evan Rachel'), ('Stranger Things', 3, 'Millie'),
             ('La Casa De Papel', 4, 'Sergio')]
    # Create a DataFrame object
    dfObj = pd.DataFrame(series, columns=['Name', 'Seasons', 'Actor'])
    # Find a duplicate rows
    duplicateDFRow = dfObj[dfObj.duplicated(['Name'])]
    print(duplicateDFRow)
    
     pyt python3 app.py
                   Name  Seasons   Actor
    4   Stranger Things        3  Millie
    5  La Casa De Papel        4  Sergio
    

    在这里,在 "**姓名 "**列中有相同值的行被标记为重复的行并返回。

    让我们看看另一个例子。

    基于两列名称查找并选择行。

    # app.py
    import pandas as pd
    series = [('Stranger Things', 3, 'Millie'),
              ('Game of Thrones', 8, 'Emilia'), ('La Casa De Papel', 4, 'Sergio'),
              ('Westworld', 3, 'Evan Rachel'), ('Stranger Things', 3, 'Millie'),
             ('La Casa De Papel', 4, 'Sergio')]
    # Create a DataFrame object
    dfObj = pd.DataFrame(series, columns=['Name', 'Seasons', 'Actor'])
    # Find a duplicate rows
    duplicateDFRow = dfObj[dfObj.duplicated(['Name', 'Seasons'])]
    print(duplicateDFRow)
    
    pyt python3 app.py
                   Name  Seasons   Actor
    4   Stranger Things        3  Millie
    5  La Casa De Papel        4  Sergio
    

    如果你想在Pandas DataFrame中找到重复的行,你可以使用pandas.dataframe.diplicated()函数。

    本教程到此结束。

  • 私信
     21,702