在Python中将csv转换为共现对列表

时间:2016-10-25 16:27:23

标签: python

我的数据是csv,如下所示:

 1     abc
 1     def
 2     ghi
 3     jkl
 3     mno
 3     pqr

我想将其转换为与第1列中相同数字共同出现的所有对的列表。像这样:

 abc; def
 jkl; mno
 mno; pqr

1 个答案:

答案 0 :(得分:1)

首先,您的输入csv文件实际上不是csv。它更像是一个可以使用str.split解析的文件。好。

现在,我将获取令牌并使用itertools.groupby使用第一列作为关键字来对具有相同第一列的项目进行分组。

完成后,使用一个项目过滤掉列表,然后对其余项目应用组合。

写为正确的csv文件:

import csv, itertools

    with open("test.csv") as f:
        with open("output.csv","w",newline="") as f2:
        # with open("output.csv","wb") as f2:   # uncomment for python 2 (comment above!)

            cw = csv.writer(f2,delimiter=";")
            for l in itertools.groupby((l.split() for l in f),lambda x : x[0]):
                grouped = set(x[1] for x in l[1])  # set avoids duplicate rows
                if len(grouped)>1:
                    for c in itertools.combinations(grouped,2):
                        cw.writerow(c)

结果(更正,你的不正确):

abc;def
jkl;mno
jkl;pqr
mno;pqr