【问题标题】:How to find intersection or subset of two CSV files如何查找两个 CSV 文件的交集或子集
【发布时间】:2017-02-02 08:24:31
【问题描述】:

我有 2 个包含两列和大量行的 CSV 文件。第一列是 id,第二列是成对值的集合。 例如:

CSV1:

1 {[1,2],[1,4],[5,6],[3,1]}

2 {[2,4] ,[6,3], [8,3]}

3 {[3,2], [5,2], [3,5]}

CSV2:

1 {[2,4] ,[6,3], [8,3]}

2 {[3,4] ,[3,3], [2,3]}

3 {[1,4],[5,6],[3,1],[5,5]}

现在我需要获取一个 CSV 文件,其中包含完全匹配的项目或属于两个 CSV 的子集。

这里的结果应该是:

{[2,4] ,[6,3], [8,3]}

{[1,4],[5,6],[3,1]}

任何人都可以建议使用 python 代码来执行此操作吗?

【问题讨论】:

  • 我尝试稍微改进一下格式和问题。你有没有尝试过?

标签: csv set-intersection


【解决方案1】:

正如answer 所建议的,您可以使用set.intersection 来获取两组的交集,但这不适用于作为项目的列表。相反,您也可以使用filter(相当于this answer):

>>> l1 = [[1,2],[1,4],[5,6],[3,1]]
>>> l2 = [[1,4],[5,6],[3,1],[5,5]]
>>> filter(lambda q: q in l2, l1) 
[[1, 4], [5, 6], [3, 1]]

在 Python 3 中,您应该将其转换为 list,因为 filter 返回一个可迭代对象:

>>> list(filter(lambda x: x in l2,l1))

您可以使用 csv.readerpandas.read_csv 加载 CSV 文件(如果它们真的是逗号 [或其他字符] 分隔的文件)。

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多