查找不在一组值中的行(与SQL Except类似)

我想要做的是删除Excel文件的几行(与pandas),然后将文件没有这些行保存到.xlsx(与pyexcelerate模块)。

我知道我可以删除数据框的行(我已经得到这个工作)。 但是我已经阅读了几篇文章,当有很多(在我的情况下> 5000)行应该被删除,只是从数据框中获得“删除”行的索引,然后切片dataframe就像例如SQL Except语句那样)。 不幸的是我不能得到它的工作,即使我已经尝试了几种方法。

这里是我的“源文章”:

通过不在列表中的标签切片pandas数据框 – 从用户ASGM答复

如何从pandas数据框中删除行列表? – 用户Dennis Golomazov的回答

这里是函数的一部分,它应该删除行并保存创build的文件:

for index, cell in enumerate(wb_in[header_xlsx]): if str(cell) in delete_set: set_to_delete.append(index) print str(cell) + " deleted from set: " + str(len(set_to_delete)) wb_out = Workbook() data_out = wb_in.loc[set(wb_in.index) - set(set_to_delete)] ws_out = wb_out.new_sheet('Main', data=data_out) wb_out.save(file_path + filename + "_2.xlsx") 

这里是一个数据框的例子:

  sku product_group name \ 0 ABCDb00610-23.0 ABA1 Anti 1 ABCDb00610-10.0 ABA1 Anti 2 ABCDb00610-1.1 ABA1 Anti 3 ABCDb00609-23.0 ABA1 Anti 4 ABCDb00609-10.0 ABA1 Anti 5 ABCDb00609-1.1 ABA1 Anti 6 ABCDb00608-23.0 ABA1 Anti 7 ABCDb00608-10.0 ABA1 Anti 8 ABCDb00608-3.3 ABA1 Anti 9 ABCDb00608-3.0 ABA1 Anti 

Delete_set是仅包含skus的集合(例如:ABCDb00608-3.3或ABCDb00609-1.1)。

顺便说一句:我已经尝试了很多解决scheme的build议

提前致谢!

使用pd.Series.isin

 df = df[~df.sku.isin(delete_set)] 

 print(df) sku product_group name 0 ABAAb00610-23.0 ABA1 Anti-Involucrin [SY5] 1 ABAAb00610-10.0 ABA1 Anti-Involucrin [SY5] 2 ABAAb00610-1.1 ABA1 Anti-EpCAM [AUA1] 3 ABAAb00609-23.0 ABA1 Anti-EpCAM [AUA1] 4 ABAAb00609-10.0 ABA1 Anti-EpCAM [AUA1] 5 ABAAb00609-1.1 ABA1 Anti-EpCAM [AUA1] 6 ABAAb00608-23.0 ABA1 Anti-EpCAM [AUA1] 7 ABAAb00608-10.0 ABA1 Anti-EpCAM [AUA1] 8 ABAAb00608-3.3 ABA1 Anti-EpCAM [AUA1] 9 ABAAb00608-3.0 ABA1 Anti-EpCAM [AUA1] print(delete_set) ('ABAAb00608-3.3', 'ABAAb00609-1.1') m = ~df.sku.isin(delete_set) print(m) 0 True 1 True 2 True 3 True 4 True 5 False 6 True 7 True 8 False 9 True Name: sku, dtype: bool print(df[m]) sku product_group name 0 ABAAb00610-23.0 ABA1 Anti-Involucrin [SY5] 1 ABAAb00610-10.0 ABA1 Anti-Involucrin [SY5] 2 ABAAb00610-1.1 ABA1 Anti-EpCAM [AUA1] 3 ABAAb00609-23.0 ABA1 Anti-EpCAM [AUA1] 4 ABAAb00609-10.0 ABA1 Anti-EpCAM [AUA1] 6 ABAAb00608-23.0 ABA1 Anti-EpCAM [AUA1] 7 ABAAb00608-10.0 ABA1 Anti-EpCAM [AUA1] 9 ABAAb00608-3.0 ABA1 Anti-EpCAM [AUA1]