【问题标题】:Python Compare 2 CSV's delete differencesPython比较2 CSV的删除差异
【发布时间】:2017-05-04 12:45:17
【问题描述】:

我有 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 上匹配的行。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    您已经知道可以使用 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 不匹配的值。

    【讨论】:

    • 我知道我可以将它们都加载进去。我卡住的地方是将两列相互比较,然后删除 CSV 2 上的行
    • 这行得通。但是,在 CSV 1 中,它似乎太大了。当我执行以下 df=pd.read_csv(csv1, nrows=10) 时,它可以工作。当我排除 nrows 时,熊猫出现内存错误。有什么办法可以将所有数据包含在 CSV1 中?
    • csv1 有多大?
    • @Wo0o 查看我的编辑。这应该有助于内存管理,因为其他解决方案会即时进行大量比较(这可能会占用大量内存)。告诉我进展如何
    • 当我运行上面的高效内存时出现以下错误:AttributeError: 'str' object has no attribute 'merge' import pandas as pd import numpy as np csv1 = 'C:\\Users\\NAME\\Desktop\\Vulnerability Reporting.csv' #Filepath of the CSV to be read csv2 = 'C:\\Users\\NAME\\Downloads\\Scan_Results_20170503_scan_1493777008_09650.csv' merged = csv2.merge(csv1, how="left", left_on=["Title", "IP"], right_on=["Vulnerability", "IP"]) print(merged.loc[merged['Vulnerability'].isnull()])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 2021-02-26
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多