繁体   English   中英

python:通过两个参考列比较两个大的csv文件,并更新另一列

[英]python:compare two large csv files by two reference columns and update another column

我有相当大的csv文件,大约需要400000行:

54.10,14.20,34.11
52.10,22.20,22.11
49.20,17.30,29.11
48.40,22.50,58.11
51.30,19.40,13.11

第二行大约250000行,其中第三列的数据已更新-第一和第二列是更新的参考:

52.10,22.20,22.15
49.20,17.30,29.15
48.40,22.50,58.15

我想建立第三个文件,例如:

54.10,14.20,34.11
52.10,22.20,22.15
49.20,17.30,29.15
48.40,22.50,58.15
51.30,19.40,13.11

它必须包含第一个文件中的所有数据,但这些行中的第二列中的第三列的值除外。

建议您看一下Pandas 合并功能 您应该能够做您想做的,它还将处理从CSV读取的数据(创建要合并的数据框)

一个仅具有csv模块的 stdlib解决方案; 第二个文件读入内存(进入字典):

import csv

with open('file2.csv', 'rb') as updates_fh:
    updates = {tuple(r[:2]): r for r in csv.reader(updates_fh)}

with open('file1.csv', 'rb') as infh, open('output.csv', 'wb') as outfh:
    writer = csv.writer(outfh)
    writer.writerows((updates.get(tuple(r[:2]), r) for r in csv.reader(infh)))

第一个with语句可打开第二个文件,并在前两列上构建一个字典作为键。 假定这些在文件中是唯一的。

然后,第二个块打开第一个文件供读取,输出文件供写入,并将输入文件中的每一行写入输出文件,用更新的版本替换updates字典中存在的任何行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM