有很多问题要求用python重新排列CSV文件,但我找不到以下问题的答案:
我希望以连接数据的方式“合并”特定列上的csv文件。这让我想起了一个SQL连接。 让我们说:
有许多csv文件看起来都一样。为简单起见,我们假设每行只有四个项目 - 三个数据项和一个类别。所以一个文件看起来像:
a,b,c,category1
e,f,g,category2
a,c,c,category3
另一个像:
0,0,0,category1
1,1,1,category1
5,5,5,category2
6,6,6,category2
9,9,9,category4
现在,我想合并这些文件以获得以下结果:
a,b,c,0,0,0,category1
e,f,g,5,5,5,category2
因此,需要以这样的方式连接行,即每个行的项目组合在一起,而“category”项是连接键,如果没有足够匹配的行,则可以删除该数据。 最好的方法是拥有可变数量的文件,这样不仅可以合并(或加入)两个文件,而且可以通过这种方式合并(或加入)。
有没有pythonic的方法来做到这一点?
答案 0 :(得分:0)
我认为你可以参考在一个公共列上加入两个csv
https://spectraldifferences.wordpress.com/2013/10/18/join-two-csv-files-based-on-a-common-field/
或
答案 1 :(得分:0)
词典词典应该做的工作 1.使用readlines()读取数据 2.使用类别作为键填充字典
dictionary = {}
for line in lines:
entries = line.split(',')
dictionary[entries[3]] = {}
dictionary[entries[3]][0] = entries[0]
dictionary[entries[3]][1] = entries[1]
dictionary[entries[3]][2] = entries[2]
for line in lines:
entries = line.split(',')
if entries[3] in dictionary:
//populate accordingly
dictionary[entries[3]][3] = entries[0]
dictionary[entries[3]][4] = entries[1]
dictionary[entries[3]][5] = entries[2]
答案 2 :(得分:0)
感谢您的灵感!
我想出了一个相当肮脏的方式:
以这样的方式读取数据,即类别为键,另一个dict为值。这个"内在的字典"将文件名作为键,将值作为值。
data = {'category1' : {'file1' : [[a,b,c]], 'file2' : [[0,0,0],[1,1,1]] }
在另一个字典中,我存储了每个类别的最小实例数(让1对类别1说2):
`limits = {"category1":2*len(infiles)*featuresinfiles,"category2": . . .}`
现在我创建了一个字典" comb"包含组合:
for c in data.keys():
if c not in comb.keys():
comb[c] = []
while len(comb[c]) < limits[c]:
for f in data[c]:
comb[c] += (data[c][f].pop(0))
这最终给出了一个字典,其中类别为键,其组合值为值;在示例中:
{'category1' : [a,b,c,0,0,0], ... }
我确定有更好的方法可以做到这一点,但作为一种解决方法,这就是我想要的。