我正试图合并两个CSV文件基于每个文件中的特定字段。
文件1.csv
id,attr1,attr2,attr3
1,True,7,"Purple"
2,False,19.8,"Cucumber"
3,False,-0.5,"A string with a comma, because it has one"
4,True,2,"Nope"
5,True,4.0,"Tuesday"
6,False,1,"Failure"
文件2.csv
id,attr4,attr5,attr6
2,"python",500000.12,False
5,"program",3,True
3,"Another string",-5,False
这是我正在使用的代码:
import csv
from collections import OrderedDict
with open('file2.csv','r') as f2:
reader = csv.reader(f2)
fields2 = next(reader,None) # Skip headers
dict2 = {row[0]: row[1:] for row in reader}
with open('file1.csv','r') as f1:
reader = csv.reader(f1)
fields1 = next(reader,None) # Skip headers
dict1 = OrderedDict((row[0], row[1:]) for row in reader)
result = OrderedDict()
for d in (dict1, dict2):
for key, value in d.iteritems():
result.setdefault(key, []).extend(value)
with open('merged.csv', 'wb') as f:
w = csv.writer(f)
for key, value in result.iteritems():
w.writerow([key] + value)
我得到这样的输出,它可以适当地合并,但并非所有行都有相同数量的属性:
1,True,7,Purple
2,False,19.8,Cucumber,python,500000.12,False
3,False,-0.5,"A string with a comma, because it has one",Another string,-5,False
4,True,2,Nope
5,True,4.0,Tuesday,program,3,True
6,False,1,Failure
file2
不会为file1
中的每个id
都有记录。我希望输出在合并文件中有来自file2
的空字段。例如,id
1如下所示:
1,True,7,Purple,,,
如何将空字段添加到在file2
中没有数据的记录中,以便合并CSV中的所有记录都具有相同数量的属性?
您可以使用^{} 来执行此操作:
我还没有测试过这个,但在我测试之前,它应该会让你走上正轨。这段代码很简单;首先导入
pandas
库,以便使用它。然后使用pandas.read_csv
读取2个csv文件并使用merge
方法合并它们。on
参数指定哪个列应用作“键”。最后,合并的csv被写入output.csv
。如果我们不使用
pandas
,我将重构为它给予
作为比较,等价的
pandas
类似于这对我来说简单得多,意味着你可以花更多的时间处理你的数据,更少的时间重新发明轮子。
使用dict of dict,然后更新它。像这样:
相关问题 更多 >
编程相关推荐