我有1个受到大量操作的CSV,它看起来像这样:
"ID","Vulnerability","Report Category","IP","DNS","NetBIOS","OS",
"x","Title","Category Type","x.x.x.x","DNS Name","Net Name","Windows"
第二个CSV看起来像这样:
"IP","DNS","NetBIOS","OS","Title","x.x.x.x","DNS Name","Net Name","Operating System","Title"
我需要做的是根据某些列比较2个CSV 在CSV 1上,我想将列B(漏洞)和列D(IP)与CSV 2列E(标题)和列A(IP)进行比较。出于此参数的目的,CSV1列B(漏洞)将精确匹配CSV列E(标题)数据 找到匹配后,它将删除CSV 2上匹配的行。
答案 0 :(得分:0)
您已经知道可以使用pandas,只需将两个csv文件加载到数据帧中,然后加入表并删除它们匹配的位置。
例如:
csv2 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5], 'col2' : [10, 11, 12, 13, 14]})
csv1 = pd.DataFrame(data = {'col1' : [1, 3, 4], 'col2' : [10, 12, 13]})
print(csv2.loc[~csv2.set_index(list(csv2.columns)).index.isin(csv1.set_index(list(csv1.columns)).index)])
在此示例中,您将保留csv2中不在csv1中的所有值。
merged = csv2.merge(csv1, how="left", left_on=["Title", "IP"], right_on=["Vulnerability", "IP"])
print(merged.loc[merged['Vulnerability'].isnull()])
这会执行左连接(保留csv2中的所有值)和过滤器,以便仅保留与csv1不匹配的值。