合并两个CSV文件,其中公共列匹配

3
我有一个用户的csv文件和一个虚拟机的csv文件,我需要将用户合并到他们对应的虚拟机中,只有当他们的id匹配时才进行合并。
但是我得到的只是一个包含所有内容的巨大文件。
file_names = ['vms.csv', 'users.csv']


o_data = []


for afile in file_names:
    file_h = open(afile)
    a_list = []
    a_list.append(afile)
    csv_reader = csv.reader(file_h, delimiter=';')
    for row in csv_reader:
        a_list.append(row[0])

    o_data.append((n for n in a_list))
    file_h.close()

with open('output.csv', 'w') as op_file:
    csv_writer = csv.writer(op_file, delimiter=';')
    for row in list(zip(*o_data)):
        csv_writer.writerow(row)
op_file.close()

我相对于 Python 来说比较新手,我是否遗漏了什么?


你为什么认为 zip(*o_data) 会自动匹配数据呢? - Anand S Kumar
我不知道,我的猜测是这就是为什么我只得到了一个巨大的文件? - MrUglama
我该如何告诉它只添加我想要的内容? - MrUglama
1个回答

1

我一直觉得Pandas在这类任务中非常有用。您可以将数据集简单地加载到pandas数据帧中,然后使用merge函数在列中的值相同时合并它们。

    import pandas
    vms = pandas.read_csv('vms.csv')
    users = pandas.read_csv('users.csv')

    output = pandas.merge(vms, users)
    output.to_csv('output.tsv')

您可以在http://pandas.pydata.org/pandas-docs/stable/merging.html中找到有关不同选项的文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接