在这里的第一篇文章。

我有一个很大的数据集(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())

10-08 07:33
查看更多