使用python比较CSV文件中的两列

时间:2018-04-05 08:24:18

标签: python csv logic

我有一个CSV文件,如:

80

我想比较这两列,并找到两列80item1,item2 A,B B,C C,D E,F 中的类似内容。输出应该是这样的:

item1

我试过这段代码

item2

我是编程新手。我不知道逻辑应该是什么以及如何解决这个问题。请帮忙。

3 个答案:

答案 0 :(得分:1)

逐行阅读无法成功。你必须处理这些列。

将csv文件的两列(不带标题)读入2 python set

执行排序交集并写回另一个csv文件:

import csv

with open("test.csv") as f:
    cr = csv.reader(f)
    next(cr) # skip title
    col1 = set()
    col2 = set()
    for a,b in cr:
        col1.add(a)
        col2.add(b)

with open("output.csv","w",newline="") as f:
    cw = csv.writer(f)
    cw.writerow(["item"])
    cw.writerows(sorted(col1 & col2))

test.csv为:

item1,item2
A,B
B,C
C,D
E,F

你得到了

item
B
C

注意:如果您的csv文件有超过2列,则解包不能正常工作,请按以下方式进行调整:

for row in cr:
    col1.add(row[0])
    col2.add(row[1])

答案 1 :(得分:1)

我建议您使用pandas库,这会将您的csv文件加载到一个漂亮的数据帧数据结构中。真的很方便。

import pandas as pd

df = pd.read_csv(filename)

然后你可以通过

获得两列之间的相似性
set(df['col1']) & set(df['col2'])

要以您描述的方式塑造输出,您可以使用此相交信息创建一个新的DataFrame

df2 = pd.DataFrame(data = {'item': list(set(df['col1']) & set(df['col2']))})

例如,

import pandas as pd
d = {'col1': [1, 2, 6, 4, 3], 'col2': [3, 2, 5, 6, 8]}
df = pd.DataFrame(data=d)
set(df['col1']) & set(df['col2'])
  

{2,3,6}

答案 2 :(得分:1)

你需要:

  1. 使用'\t'作为分隔符,因为您的文件由制表符分隔,而不是逗号分隔
  2. 从两个列表中获取所有项目作为一个集合,然后获取两个集合的交集
  3. 打印
  4. 这是我的实施:

    import csv
    with open('output/id.csv', 'r') as csvfile:
        csvreader = csv.reader(csvfile, delimiter='\t')
    
        items_in_1 = set()
        items_in_2 = set()
    
        for line in csvreader:
            items_in_1.add(line[0])
            items_in_2.add(line[1])
    
        items_in_both = items_in_1.intersection(items_in_2)
    
        print("item")
        for item in items_in_both:
            print(item)