如何查找两个CSV文件的交集或子集

时间:2017-02-02 08:24:31

标签: csv set-intersection

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

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代码吗?

1 个答案:

答案 0 :(得分:0)

根据此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文件(如果它们实际上是逗号[或其他字符]分隔的文件)。