如果使用python在excel中发现重复数据,如何删除以下行?

如果使用python在excel中发现重复数据,如何删除以下行?,python,excel,pandas,duplicates,Python,Excel,Pandas,Duplicates,如果使用python在excel中发现重复数据,是否有人知道如何删除以下行 这是我的输入数据。输入数据只有两列: col_1 col_2 1 number 2.37 2 number 2.8 3 number 3.4 4 number 5 number 6 number 7 number 2.62 8 number 3.1 9 number 2.6 如果发现重复数据,则应从重复

如果使用python在excel中发现重复数据,是否有人知道如何删除以下行

这是我的输入数据。输入数据只有两列:

col_1   col_2
1       number 2.37
2       number 2.8
3       number 3.4
4       number 
5       number 
6       number 
7       number 2.62
8       number 3.1
9       number 2.6
如果发现重复数据,则应从重复数据开始删除行的其余部分。在这种情况下,上述输入数据显示第4行到第6行是重复数据,这意味着检测到重复数据,应删除第4行,直到列的末尾,即第9行

因此,输出应如下所示:输出数据只有两列:

col_1   col_2
1       number 2.37
2       number 2.8
3       number 3.4
这是我的代码:但我的代码似乎没有达到我的目标

df = pd.read_excel(path_to_the_file)
df = df[~df.col_1.str.match('number')]
df.to_excel(path_to_the_file)

任何帮助都将不胜感激,谢谢

您所要求的独立于哪列或“重复数据”的含义的情况需要一个循环,因为切片有自己的方式,它并不意味着是一个迭代函数。你们在问题中所陈述的内容取决于在下一行某个点上找到的数据。因此,一旦发现数据在何处重复(如果确实重复),就应该使用切片

函数返回一个完整的序列,该序列告诉您数据帧中的每一行是否匹配。sum函数通过将强制布尔值添加到序列中的int来获取总匹配项。如果有多个匹配当前行+一,并且只有在该行+一时,才可以从该行开始切片df。第一行不能与第一行重复,无需检查

从这个例子中,你可以知道你想要达到的目标的具体去向

import pandas as pd

for idx,row in df[1:].iterrows(): 
    if df.col_2.str.match(df.loc[idx].col_2).sum() > 1: 
        print("found at", idx) 
        df = df[:idx] 
        break
请记住,这只是一个开箱即用的示例,不应使用break,您应该使用elif并明确定义代码的行为。

df=pd.read\u excelpath\u to\u文件 index=df[df.duplicated['col_2']==True]。值[0][0] df2=df.iloc[:index-2] 打印DF2 输出: 第1列第2列 0 1数字2.37 1 2数字2.8 2 3数字3.4
您的数据帧在呈现时不清楚。这些数字是否在col_1索引中?或者是专栏,就像它看起来的那样。第2列是否包含“编号2.37”或编号是否在第2列之外?重复数据是什么意思,行中的数据?在同一列?根据您的解释,从技术上讲,第5行是第一个副本,第4行仍然是唯一的。连同号码。更详细一点,有不同的解释方式。@MikeMajara,很抱歉我的解释不好,col_1中的数字只显示col_2有多少行,col_2包含“数字2.37”,重复的数据表示同一列中的行中的数据。是的,你是对的,第5行是第一个重复,第4行仍然是唯一的。但是,我想删除第4行、第5行、第6行、第7行、第8行和第9行。提供的答案被标记为低质量帖子供审查。提供的答案可能是正确的,但可以从解释中获益。只有代码的答案不被认为是好答案。以下是一些指导原则。来自。@misha,谢谢你的回答,我会稍后再试,谢谢!谢谢你的回答,我以后再试试。顺便问一下,您的意思是要替换elif还是显式地使用break?