在这里的第一篇文章。
我有一个很大的数据集(80gb .tsv),按状态(分别为1gb--12gb)切成薄片,如下表所示。大约6200万行。
+--------+----+----+----+
| county | c1 | c2 | c3 |
+--------+----+----+----+
| A | 1 | 2 | 3 |
+--------+----+----+----+
| B | 2 | 1 | 3 |
+--------+----+----+----+
| C | 4 | 1 | 2 |
+--------+----+----+----+
还有另一个非常简单的.csv表,包含83个县
+--------+------------+
| county | population |
+--------+------------+
| a | 1 |
+--------+------------+
| b | 2 |
+--------+------------+
| c | 4 |
+--------+------------+
如何将两个文件合并/匹配以将总体添加到顶部表格,如下所示
+--------+----+----+----+------------+
| county | c1 | c2 | c3 | population |
+--------+----+----+----+------------+
| A | 1 | 2 | 3 | 1 |
+--------+----+----+----+------------+
| B | 2 | 2 | 3 | 2 |
+--------+----+----+----+------------+
| C | 4 | 1 | 2 | 4 |
+--------+----+----+----+------------+
最佳答案
首先,您必须阅读第一个文件并按其主键将其行分组(在您的情况下,这将是“县”)。我不确定数据的结构,因此您可以修改文件名和定界符。
import csv
reader = csv.DictReader(open("file1.csv"), delimiter=";")
d = {row["county"]: row for row in reader}
然后,您必须阅读第二个文件并更新现有行。
reader = csv.DictReader(open("file2.csv"), delimiter=";")
for row in reader:
d[row["county"]].update(row)
现在您有了一个字典,其中包含每个主键的合并行。由于我假设您要将结果存储在文件中,因此您必须遍历字典中的每个值,然后使用
writerows
将它们写入文件。headers = list(d[row["county"]])
writer = csv.DictWriter(open("output.csv", "w"), fieldnames=headers, delimiter=";", lineterminator="\n")
writer.writeheader()
writer.writerows(d.values())