gpt4 book ai didi

python - 在 Python 中合并一对多的 CSV 文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:54:02 37 4
gpt4 key购买 nike

我有一系列随机模拟的输出,其格式为 .csv 文件,看起来像这样:

Run,ID,Var
1,1,7
1,2,9
1,3,4
2,1,3
2,2,4
2,3,8

等等

除此之外,我还有另一个数据文件,也是一个 .csv,格式如下:

ID, Var2, Var3
1,0.89,0.10
2,0.45,0.98
3,0.27,0.05
4,0.98,0.24

注意:数据文件中有一些值不会出现在模拟文件中。我希望忽略这些。

我想做的是编写一个脚本,从第一个 .csv 文件中获取每个值 ID,找到 Var2 和 Var3 并将它们放在一起,最终得到如下内容:

Run, ID, Var, Var2, Var3
1,1,7,0.89,0.10
1,2,9,0.45,0.98
1,3,4,0.27,0.05
2,1,3,0.89,0.10
2,2,4,0.45,0.98
2,3,8,0.27,0.05

关于执行此操作的任何建议?我承认这是我对 Python 中数据处理的理解的极限。我对如何在 SAS 中执行此操作有一定的了解,但我更愿意将其保留为一种语言任务,以便它们可以作为单个脚本进行处理。

最佳答案

输出.csv:

Run, ID, Var
1, 1, 7
1, 2, 9
1, 3, 4
2, 1, 3
2, 2, 4
2, 3, 8

数据.csv:

ID, Var2, Var3
1, 0.89, 0.10
2, 0.45, 0.98
3, 0.27, 0.05
8, 0.4, 0.5

注意 即使我们在 data.csv 中有条目,但在 ouput.csv 中不存在,它也不会影响最终结果,因为当我们解析 output.csv 时,我们只查找 ID我们从 output.csv 知道,虽然相反的情况是不正确的 data.csv 至少必须包含 output.csv 中的所有 ID,但如果需要,这很容易处理。

代码:

import csv
from pprint import pprint

data = dict([(row['ID'], row) for row in csv.DictReader(open('data.csv', 'rb'), skipinitialspace = True)])
values = []
for row in csv.DictReader(open('output.csv', 'rb'), skipinitialspace = True):
values.append(row)
values[-1].update(data[row['ID']])

>>> pprint(values)
[{'ID': '1', 'Run': '1', 'Var': '7', 'Var2': '0.89', 'Var3': '0.10'},
{'ID': '2', 'Run': '1', 'Var': '9', 'Var2': '0.45', 'Var3': '0.98'},
{'ID': '3', 'Run': '1', 'Var': '4', 'Var2': '0.27', 'Var3': '0.05'},
{'ID': '1', 'Run': '2', 'Var': '3', 'Var2': '0.89', 'Var3': '0.10'},
{'ID': '2', 'Run': '2', 'Var': '4', 'Var2': '0.45', 'Var3': '0.98'},
{'ID': '3', 'Run': '2', 'Var': '8', 'Var2': '0.27', 'Var3': '0.05'}]
>>>

现在要保存回 csv 文件。

fieldnames = ['Run', 'ID', 'Var', 'Var2', 'Var3']
f = open('combined.csv', 'wb')
csvwriter = csv.DictWriter(f, fieldnames = fieldnames)
csvwriter.writerow(dict((fn,fn) for fn in fieldnames)) # 2.7 has writeheader, which is cleaner
[csvwriter.writerow(row) for row in values]
f.close()


$ cat combined.csv
Run,ID,Var,Var2,Var3
1,1,7,0.89,0.10
1,2,9,0.45,0.98
1,3,4,0.27,0.05
2,1,3,0.89,0.10
2,2,4,0.45,0.98
2,3,8,0.27,0.05

希望对您有所帮助。

关于python - 在 Python 中合并一对多的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11373067/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com