Python 检查dataframe列中是否存在重复值
pandas中是否有方法检查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
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)@JeffMitchelldf.Date
equalsdf['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')