【问题标题】:Merging two csv files where common column matches合并公共列匹配的两个 csv 文件
【发布时间】:2015-12-22 08:59:42
【问题描述】:

我有一个用户的 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)会自动为你匹配数据?
  • Idk,我猜这就是为什么我只得到大文件的原因?
  • 我怎样才能告诉它只添加我想要的?

标签: python csv merge


【解决方案1】:

我一直发现 pandas 对此类任务非常有帮助。您可以简单地将数据集加载到 pandas 数据框中,然后使用合并功能将它们合并到列中的值相同的位置。

    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找到不同选项的文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2023-03-12
    • 2019-03-01
    相关资源
    最近更新 更多