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

How to find intersection or subset of two CSV files

我有 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 代码来做到这一点?

正如这个 answer you can use set.intersection to get the intersection of two sets, however this does not work with lists as items. Instead you can also use filter (comparable to 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 returns 一个可迭代的:

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

例如,您可以使用 csv.reader or pandas.read_csv 加载 CSV 文件(如果它们确实是逗号 [或其他字符] 分隔的文件)。