【发布时间】:2020-01-04 20:57:36
【问题描述】:
我编写了一段代码,用于比较来自两个 csv 的数据并将最终输出写入一个新的 csv。问题是除了标题之外没有其他内容被写入 csv。下面是我的代码,
import csv
data_3B = open('3B_processed.csv', 'r')
reader_3B = csv.DictReader(data_3B)
data_2A = open('2A_processed.csv', 'r')
reader_2A = csv.DictReader(data_2A)
l_3B_2A = [["taxable_entity_id", "return_period", "3B", "2A"]]
for row_3B in reader_3B:
for row_2A in reader_2A:
if row_3B["taxable_entity_id"] == row_2A["taxable_entity_id"] and row_3B["return_period"] == row_2A["return_period"]:
l_3B_2A.append([row_3B["taxable_entity_id"], row_3B["return_period"], row_3B["total"], row_2A["total"]])
with open("3Bvs2A_new.csv", "w") as csv_file:
writer = csv.writer(csv_file)
writer.writerows(l_3B_2A)
csv_file.close()
我该如何解决这个问题?
编辑: 2A_processed.csv 样本:
taxable_entity_id,return_period,total
2d9cc638-5ed0-410f-9a76-422e32f34779,072019,0
2d9cc638-5ed0-410f-9a76-422e32f34779,062019,0
2d9cc638-5ed0-410f-9a76-422e32f34779,082019,0
e5091f99-e725-44bc-b018-0843953a8771,082019,0
e5091f99-e725-44bc-b018-0843953a8771,052019,41711.5
920da7ba-19c7-45ce-ba59-3aa19a6cb7f0,032019,2862.94
410ecd0f-ea0f-4a36-8fa6-9488ba3c095b,082018,48253.9
3B_处理过的样本:
taxable_entity_id,return_period,total
1e5ccfbc-a03e-429e-b79a-68041b69dfb0,072017,0.0
1e5ccfbc-a03e-429e-b79a-68041b69dfb0,082017,0.0
1e5ccfbc-a03e-429e-b79a-68041b69dfb0,092017,0.0
f7d52d1f-00a5-440d-9e76-cb7fbf1afde3,122017,0.0
1b9afebb-495d-4516-96bd-1e21138268b7,072017,146500.0
1b9afebb-495d-4516-96bd-1e21138268b7,082017,251710.0
【问题讨论】:
-
你试过用熊猫数据框做这个吗?
-
您确定您的列表
l_3B_2A包含您要收集的所有数据吗?if的情况在我看来很可疑。大胆猜测,taxable_entity_id或return_period中的一个键在末尾包含换行符,这就是为什么字符串的相等比较永远不起作用的原因。 -
@BillyBonaros 我如何使用熊猫来做到这一点?我不是很擅长..
-
@Arne,我不确定.. 这两个键的末尾没有换行符.. 我比较的两个 csv 是使用 python 生成的。我正在添加一个示例。
-
@MohnishM 如果您在 if 之后编写 else 条件并在其中打印 row_3B 和 row_2A,您可能会明白为什么即使您认为应该输入 if 条件,您也永远无法进入。跨度>