如果使用python在excel中找到重复的数据,有人知道如何删除下一行吗?
以下是我的输入数据(输入数据只有2列):
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行是重复的数据,这意味着检测到重复的数据,直到第9行的列末尾的第4行应该被删除。
因此,输出应该是这样的(输出数据只有2列):
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)任何帮助都将不胜感激,谢谢!
发布于 2019-09-30 19:16:16
df = pd.read_excel(path_to_the_file)
index=df[df.duplicated(['col_2']) == True].values[0][0]
df2 = df.iloc[:index-2]
print(df2)
output:
col_1 col_2
0 1 number2.37
1 2 number2.8
2 3 number3.4发布于 2019-09-30 18:57:25
您所要求的情况(独立于哪个列是哪个或什么‘复制数据’的意思)需要一个循环,因为切片有它自己的方式,它并不意味着是一个迭代函数。但是,在您的问题中,所陈述的内容确实取决于在(“下一行”)某个点上找到的数据。因此,一旦您找到数据被复制的位置(如果确实是这样的话),就应该使用切片。
dataframe.str.match()函数返回一个完整的系列,该系列将告诉您是否对数据文件中的每一行进行匹配。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并显式定义代码的行为。
https://stackoverflow.com/questions/58173276
复制相似问题