Python 检查dataframe列中是否存在重复值

Python 检查dataframe列中是否存在重复值,python,pandas,dataframe,duplicates,Python,Pandas,Dataframe,Duplicates,pandas中是否有方法检查dataframe列是否有重复的值,而不实际删除行?我有一个函数可以删除重复的行,但是,我只希望在特定列中确实存在重复的行时运行该函数 目前,我比较列中唯一值的数量和行的数量:如果唯一值少于行,则存在重复项,代码运行 if len(df['Student'].unique()) < len(df.index): # Code to remove duplicates based on Date column runs 主要问题 列中是否存在重复值,T

pandas中是否有方法检查dataframe列是否有重复的值,而不实际删除行?我有一个函数可以删除重复的行,但是,我只希望在特定列中确实存在重复的行时运行该函数

目前,我比较列中唯一值的数量和行的数量:如果唯一值少于行,则存在重复项,代码运行

 if len(df['Student'].unique()) < len(df.index):
    # Code to remove duplicates based on Date column runs
主要问题 列中是否存在重复值,True/False

假设上述数据帧(df),我们可以通过以下方式快速检查
学生列中是否存在重复项:

boolean = not df["Student"].is_unique      # True (credit to @Carsten)
boolean = df['Student'].duplicated().any() # True

进一步阅读和参考资料 上面我们使用的是熊猫系列方法之一。熊猫数据帧有几个有用的功能,其中两个是:

  • (self[,subset,keep,inplace])-返回删除重复行的数据帧,可选地仅考虑某些列
  • (self[,subset,keep])-返回表示重复行的布尔序列,可以选择仅考虑某些列
  • 这些方法可以作为一个整体应用于数据帧,而不仅仅是上面提到的序列(列)。相当于:

    boolean = df.duplicated(subset=['Student']).any() # True
    # We were expecting True, as Joe can be seen twice.
    
    但是,如果我们对整个框架感兴趣,我们可以继续做:

    boolean = df.duplicated().any() # False
    boolean = df.duplicated(subset=['Student','Date']).any() # False
    # We were expecting False here - no duplicates row-wise 
    # ie. Joe Dec 2017, Joe Dec 2018
    
    最后一个有用的提示。通过使用
    keep
    参数,我们通常可以跳过几行,直接访问我们需要的内容:

    保留:{'first','last',False},默认值为'first'

    • 第一:除去第一次出现的重复项
    • 最后:删除除最后一次出现之外的重复项
    • False:删除所有重复项

    玩弄的例子 返回

    True
    
      Student           Date
    0     Joe  December 2017
    1     Bob     April 2018
    
      Student           Date
    0     Joe  December 2017
    1     Bob     April 2018
    
    除了和,熊猫还有和

    将熊猫作为pd导入
    df=pd.read_csv(“https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv")
    
    用Python≥3.8,检查重复项并访问一些重复行:

    if(duplicated:=df.duplicated(keep=False)).any():
    一些重复项=df[duplicated]。对值进行排序(按=df.columns.to_list()).head()
    打印(f“数据框有一个或多个重复行,例如:\n{some_duplicates}”)
    
    您可以使用
    是唯一的

    df['Student'].is_unique
    
    # equals true in case of no duplicates
    
    需要的旧版本:

    pd.Series(df['Student']).is_unique
    

    如果您想知道有多少个副本及其用途:

    df.pivot_table(index=['ColumnName'], aggfunc='size')
    
    df.pivot_table(index=['ColumnName1',.., 'ColumnNameN'], aggfunc='size')
    

    按日期排序df,然后
    df。删除重复的('student')
    @Wen是的,但可能会转换为datetime并在之后排序。快速检查将是:
    any(df['Student'].duplicated())
    两个误解:A)根本不需要检查
    len(df[col].unique())
    ,pandas有
    df[col].nunique()
    b),但无论如何你也不需要它,你只是在寻找感谢,any(df['Student'.duplicated())这就是我想要的。顺便说一句,我无法将日期转换为工作状态(尽管我现有的函数可以工作)。我得到了错误AttributeError:'DataFrame'对象没有df['Date']=pd.to_datetime(df.Date)@JeffMitchell
    df.Date
    equals
    df['Date']
    行的属性'Date'。它区分大小写。您确定您的列名为Date吗?可以尝试
    df['Date']
    too您只需执行
    df['Student'],它是唯一的
    df['Student']
    已经是熊猫系列了,但较老的熊猫版本却难以做到这一点。现在编辑答案
    df['Student'].is_unique
    
    # equals true in case of no duplicates
    
    pd.Series(df['Student']).is_unique
    
    df.pivot_table(index=['ColumnName'], aggfunc='size')
    
    df.pivot_table(index=['ColumnName1',.., 'ColumnNameN'], aggfunc='size')