通过 python 在 csv 文件的两列数据之间创建不同的组合/模式
Create different combination / patterns between the data of two columns of a csv file by python
我有一个包含 5 列的 .csv 文件,a_id、b_id、var、lo、up。我想根据 a_id、b_id 和 var.
在两个变量之间创建不同的组合/模式
另外,一开始我想根据a_id,b_id删除没有重复的记录,因为如果没有重复,就不会创建组合或匹配.结果,在 dataFile.csv 中,第一条记录被删除,因为它没有重复项。
对于两个变量之间的组合/模式,首先我想在每个 a_id 和 b_id 的每个记录上创建单个组合。在这种情况下,第二个变量的值为空。这可以显示在结果文件中。例如,如果我从记录 2 到 5 创建不同的组合/模式,这意味着 a_id = 103 和 b_id = 195,结果可以在 resultFile 中看到。以相同的方式,其他基于 a_id、b_id 和 var 的组合/模式将被创建为 resultFile.csv。在result文件中,变量名中的1、2、3只是用来标识变量,在resultFile中通常不需要。此外,我为每个模式使用了一个空白行,resultFile 中也不需要它。我用它只是为了清楚地看到模式。
我已经展示了基于 a_id 和 b_id 的两个变量的不同组合。我有不同的 a_id 和不同的 b_id 真实数据。
任何意见和建议都将不胜感激。
dataFile.csv.
a_id b_id var lo up
103 190 dwel 0 236
103 195 ses 1 3
103 195 ses 4 113
103 195 pv 1 5
103 195 pv 6 29
103 266 dwl 15 92
103 266 dwl 93 144
103 266 dwl 145 521
103 266 ses 1 2
103 266 ses 3 6
103 266 pv 1 2
103 266 pv 3 9
103 266 pv 10 23
103 266 pv 24 33
103 266 Elp 142 711
103 266 Elp 711 885
107 272 dwl 15 95
107 272 dwl 96 624
107 272 ses 1 2
107 272 ses 3 6
107 272 pv 1 2
107 272 pv 3 9
. . . . .
. . . . .
resultFile.csv.
resultFile.csv应该是这样的:
a_id b_id var1 lo up var2 lo up
103 195 ses1 1 3 null null null
103 195 ses2 4 113 null null null
103 195 pv1 1 5 null null null
103 195 pv2 6 29 null null null
103 195 ses1 1 3 pv1 1 5
103 195 ses1 1 3 pv2 6 29
103 195 ses2 4 113 pv1 1 5
103 195 ses2 4 113 pv2 6 29
103 266 dwl1 15 92 null null null
103 266 dwl2 93 144 null null null
103 266 dwl3 145 521 null null null
103 266 ses1 1 2 null null null
103 266 ses2 3 6 null null null
103 266 pv1 1 2 null null null
103 266 pv2 3 9 null null null
103 266 pv3 10 23 null null null
103 266 pv4 24 103 null null null
103 266 elp1 142 711 null null null
103 266 elp2 712 885 null null null
103 266 dwl1 15 92 ses1 1 2
103 266 dwl1 15 92 ses2 3 6
103 266 dwl2 993 144 ses1 1 2
103 266 dwl2 993 144 ses2 3 6
103 266 dwl3 145 521 ses1 1 2
103 266 dwl3 145 521 ses2 3 6
103 266 dwl1 15 92 pv1 1 2
103 266 dwl1 15 92 pv2 3 9
103 266 dwl1 15 92 pv3 10 23
103 266 dwl1 15 92 pv4 24 33
103 266 dwl2 993 144 pv1 1 2
103 266 dwl2 993 144 pv2 3 9
103 266 dwl2 993 144 pv3 10 23
103 266 dwl2 993 144 pv4 24 33
103 266 dwl3 145 521 pv1 1 2
103 266 dwl3 145 521 pv2 3 9
103 266 dwl3 145 521 pv3 10 23
103 266 dwl3 145 521 pv4 24 33
103 266 dwl1 15 92 elp1 142 711
103 266 dwl1 15 92 elp2 712 885
103 266 dwl2 993 144 elp1 142 711
103 266 dwl2 993 144 elp2 712 885
103 266 dwl3 145 521 elp1 142 711
103 266 dwl3 145 521 elp2 712 885
103 266 ses1 1 2 pv1 1 2
103 266 ses1 1 2 pv2 3 9
103 266 ses1 1 2 pv3 10 23
103 266 ses1 1 2 pv4 24 33
103 266 ses2 3 6 pv1 1 2
103 266 ses2 3 6 pv2 3 9
103 266 ses2 3 6 pv3 10 23
103 266 ses2 3 6 pv4 24 33
103 266 ses1 1 2 dwl1 615 992
103 266 ses1 1 2 dwl2 993 144
103 266 ses1 1 2 dwl3 145 210
103 266 ses2 3 6 dwl1 615 992
103 266 ses2 3 6 dwl2 993 144
103 266 ses2 3 6 dwl3 145 210
103 266 ses1 1 2 elp1 142 711
103 266 ses1 1 2 elp2 712 885
103 266 ses2 3 6 elp1 142 711
103 266 ses2 3 6 elp2 712 885
103 266 elp1 142 711 pv1 1 2
103 266 elp1 142 711 pv2 3 9
103 266 elp1 142 711 pv3 10 23
103 266 elp1 142 711 pv4 24 33
103 266 elp2 712 885 pv1 1 2
103 266 elp2 712 885 pv2 3 9
103 266 elp2 712 885 pv3 10 23
103 266 elp2 712 885 pv4 24 33
103 266 elp1 142 711 ses1 1 2
103 266 elp1 142 711 ses2 3 6
103 266 elp2 712 885 ses1 1 2
103 266 elp2 712 885 ses2 3 6
103 266 elp1 142 711 dwl1 615 992
103 266 elp1 142 711 dwl2 993 144
103 266 elp1 142 711 dwl3 145 210
103 266 elp2 712 885 dwl1 615 992
103 266 elp2 712 885 dwl2 993 144
103 266 elp2 712 885 dwl3 145 210
103 266 pv1 1 2 dwl1 615 992
103 266 pv1 1 2 dwl2 993 144
103 266 pv1 1 2 dwl3 145 210
103 266 pv2 3 9 dwl1 615 992
103 266 pv2 3 9 dwl2 993 144
103 266 pv2 3 9 dwl3 145 210
103 266 pv3 10 23 dwl1 615 992
103 266 pv3 10 23 dwl2 993 144
103 266 pv3 10 23 dwl3 145 210
103 266 pv4 24 33 dwl1 615 992
103 266 pv4 24 33 dwl2 993 144
103 266 pv4 24 33 dwl3 145 210
103 266 pv1 1 2 ses1 1 2
103 266 pv1 1 2 ses2 3 6
103 266 pv2 3 9 ses1 1 2
103 266 pv2 3 9 ses2 3 6
103 266 pv3 10 23 ses1 1 2
103 266 pv3 10 23 ses2 3 6
103 266 pv4 24 33 ses1 1 2
103 266 pv4 24 33 ses2 3 6
103 266 pv1 1 2 elp1 142 711
103 266 pv1 1 2 elp2 712 885
103 266 pv2 3 9 elp1 142 711
103 266 pv2 3 9 elp2 712 885
103 266 pv3 10 23 elp1 142 711
103 266 pv3 10 23 elp2 712 885
103 266 pv4 24 33 elp1 142 711
103 266 pv4 24 33 elp2 712 885
以下 Python 解决方案应该可以帮助您入门:
from itertools import groupby, product
import csv
output_header = ["a_id", "b_id", "var1", "lo", "up", "var2", "lo", "up"]
f_input = open('dataFile.csv', 'rb')
csv_input = csv.reader(f_input)
input_header = next(csv_input)
f_output = open('resultFile.csv', 'wb')
csv_output = csv.writer(f_output)
csv_output.writerow(output_header)
for k1, g1 in groupby(csv_input, key=lambda x: (x[0], x[1])):
group1 = list(g1)
if len(group1) > 1:
for row in group1:
csv_output.writerow(row + ['null'] * 3)
p = [list(g2) for k2, g2 in groupby(group1, key=lambda x: x[2])]
for pairs in product(*p):
if len(pairs) > 1:
csv_output.writerow(pairs[0] + pairs[1][2:])
f_input.close()
f_output.close()
这将为您提供一个 resultFile.csv
文件,开头如下:
a_id,b_id,var1,lo,up,var2,lo,up
103,195,ses,1,3,null,null,null
103,195,ses,4,113,null,null,null
103,195,pv,1,5,null,null,null
103,195,pv,6,29,null,null,null
103,195,ses,1,3,pv,1,5
103,195,ses,1,3,pv,6,29
103,195,ses,4,113,pv,1,5
103,195,ses,4,113,pv,6,29
103,266,dwl,15,92,null,null,null
103,266,dwl,93,144,null,null,null
103,266,dwl,145,521,null,null,null
...
使用 Python 2.6.6 进行测试(我相信 OP 正在使用)
我有一个包含 5 列的 .csv 文件,a_id、b_id、var、lo、up。我想根据 a_id、b_id 和 var.
在两个变量之间创建不同的组合/模式另外,一开始我想根据a_id,b_id删除没有重复的记录,因为如果没有重复,就不会创建组合或匹配.结果,在 dataFile.csv 中,第一条记录被删除,因为它没有重复项。
对于两个变量之间的组合/模式,首先我想在每个 a_id 和 b_id 的每个记录上创建单个组合。在这种情况下,第二个变量的值为空。这可以显示在结果文件中。例如,如果我从记录 2 到 5 创建不同的组合/模式,这意味着 a_id = 103 和 b_id = 195,结果可以在 resultFile 中看到。以相同的方式,其他基于 a_id、b_id 和 var 的组合/模式将被创建为 resultFile.csv。在result文件中,变量名中的1、2、3只是用来标识变量,在resultFile中通常不需要。此外,我为每个模式使用了一个空白行,resultFile 中也不需要它。我用它只是为了清楚地看到模式。 我已经展示了基于 a_id 和 b_id 的两个变量的不同组合。我有不同的 a_id 和不同的 b_id 真实数据。
任何意见和建议都将不胜感激。
dataFile.csv.
a_id b_id var lo up
103 190 dwel 0 236
103 195 ses 1 3
103 195 ses 4 113
103 195 pv 1 5
103 195 pv 6 29
103 266 dwl 15 92
103 266 dwl 93 144
103 266 dwl 145 521
103 266 ses 1 2
103 266 ses 3 6
103 266 pv 1 2
103 266 pv 3 9
103 266 pv 10 23
103 266 pv 24 33
103 266 Elp 142 711
103 266 Elp 711 885
107 272 dwl 15 95
107 272 dwl 96 624
107 272 ses 1 2
107 272 ses 3 6
107 272 pv 1 2
107 272 pv 3 9
. . . . .
. . . . .
resultFile.csv.
resultFile.csv应该是这样的:
a_id b_id var1 lo up var2 lo up
103 195 ses1 1 3 null null null
103 195 ses2 4 113 null null null
103 195 pv1 1 5 null null null
103 195 pv2 6 29 null null null
103 195 ses1 1 3 pv1 1 5
103 195 ses1 1 3 pv2 6 29
103 195 ses2 4 113 pv1 1 5
103 195 ses2 4 113 pv2 6 29
103 266 dwl1 15 92 null null null
103 266 dwl2 93 144 null null null
103 266 dwl3 145 521 null null null
103 266 ses1 1 2 null null null
103 266 ses2 3 6 null null null
103 266 pv1 1 2 null null null
103 266 pv2 3 9 null null null
103 266 pv3 10 23 null null null
103 266 pv4 24 103 null null null
103 266 elp1 142 711 null null null
103 266 elp2 712 885 null null null
103 266 dwl1 15 92 ses1 1 2
103 266 dwl1 15 92 ses2 3 6
103 266 dwl2 993 144 ses1 1 2
103 266 dwl2 993 144 ses2 3 6
103 266 dwl3 145 521 ses1 1 2
103 266 dwl3 145 521 ses2 3 6
103 266 dwl1 15 92 pv1 1 2
103 266 dwl1 15 92 pv2 3 9
103 266 dwl1 15 92 pv3 10 23
103 266 dwl1 15 92 pv4 24 33
103 266 dwl2 993 144 pv1 1 2
103 266 dwl2 993 144 pv2 3 9
103 266 dwl2 993 144 pv3 10 23
103 266 dwl2 993 144 pv4 24 33
103 266 dwl3 145 521 pv1 1 2
103 266 dwl3 145 521 pv2 3 9
103 266 dwl3 145 521 pv3 10 23
103 266 dwl3 145 521 pv4 24 33
103 266 dwl1 15 92 elp1 142 711
103 266 dwl1 15 92 elp2 712 885
103 266 dwl2 993 144 elp1 142 711
103 266 dwl2 993 144 elp2 712 885
103 266 dwl3 145 521 elp1 142 711
103 266 dwl3 145 521 elp2 712 885
103 266 ses1 1 2 pv1 1 2
103 266 ses1 1 2 pv2 3 9
103 266 ses1 1 2 pv3 10 23
103 266 ses1 1 2 pv4 24 33
103 266 ses2 3 6 pv1 1 2
103 266 ses2 3 6 pv2 3 9
103 266 ses2 3 6 pv3 10 23
103 266 ses2 3 6 pv4 24 33
103 266 ses1 1 2 dwl1 615 992
103 266 ses1 1 2 dwl2 993 144
103 266 ses1 1 2 dwl3 145 210
103 266 ses2 3 6 dwl1 615 992
103 266 ses2 3 6 dwl2 993 144
103 266 ses2 3 6 dwl3 145 210
103 266 ses1 1 2 elp1 142 711
103 266 ses1 1 2 elp2 712 885
103 266 ses2 3 6 elp1 142 711
103 266 ses2 3 6 elp2 712 885
103 266 elp1 142 711 pv1 1 2
103 266 elp1 142 711 pv2 3 9
103 266 elp1 142 711 pv3 10 23
103 266 elp1 142 711 pv4 24 33
103 266 elp2 712 885 pv1 1 2
103 266 elp2 712 885 pv2 3 9
103 266 elp2 712 885 pv3 10 23
103 266 elp2 712 885 pv4 24 33
103 266 elp1 142 711 ses1 1 2
103 266 elp1 142 711 ses2 3 6
103 266 elp2 712 885 ses1 1 2
103 266 elp2 712 885 ses2 3 6
103 266 elp1 142 711 dwl1 615 992
103 266 elp1 142 711 dwl2 993 144
103 266 elp1 142 711 dwl3 145 210
103 266 elp2 712 885 dwl1 615 992
103 266 elp2 712 885 dwl2 993 144
103 266 elp2 712 885 dwl3 145 210
103 266 pv1 1 2 dwl1 615 992
103 266 pv1 1 2 dwl2 993 144
103 266 pv1 1 2 dwl3 145 210
103 266 pv2 3 9 dwl1 615 992
103 266 pv2 3 9 dwl2 993 144
103 266 pv2 3 9 dwl3 145 210
103 266 pv3 10 23 dwl1 615 992
103 266 pv3 10 23 dwl2 993 144
103 266 pv3 10 23 dwl3 145 210
103 266 pv4 24 33 dwl1 615 992
103 266 pv4 24 33 dwl2 993 144
103 266 pv4 24 33 dwl3 145 210
103 266 pv1 1 2 ses1 1 2
103 266 pv1 1 2 ses2 3 6
103 266 pv2 3 9 ses1 1 2
103 266 pv2 3 9 ses2 3 6
103 266 pv3 10 23 ses1 1 2
103 266 pv3 10 23 ses2 3 6
103 266 pv4 24 33 ses1 1 2
103 266 pv4 24 33 ses2 3 6
103 266 pv1 1 2 elp1 142 711
103 266 pv1 1 2 elp2 712 885
103 266 pv2 3 9 elp1 142 711
103 266 pv2 3 9 elp2 712 885
103 266 pv3 10 23 elp1 142 711
103 266 pv3 10 23 elp2 712 885
103 266 pv4 24 33 elp1 142 711
103 266 pv4 24 33 elp2 712 885
以下 Python 解决方案应该可以帮助您入门:
from itertools import groupby, product
import csv
output_header = ["a_id", "b_id", "var1", "lo", "up", "var2", "lo", "up"]
f_input = open('dataFile.csv', 'rb')
csv_input = csv.reader(f_input)
input_header = next(csv_input)
f_output = open('resultFile.csv', 'wb')
csv_output = csv.writer(f_output)
csv_output.writerow(output_header)
for k1, g1 in groupby(csv_input, key=lambda x: (x[0], x[1])):
group1 = list(g1)
if len(group1) > 1:
for row in group1:
csv_output.writerow(row + ['null'] * 3)
p = [list(g2) for k2, g2 in groupby(group1, key=lambda x: x[2])]
for pairs in product(*p):
if len(pairs) > 1:
csv_output.writerow(pairs[0] + pairs[1][2:])
f_input.close()
f_output.close()
这将为您提供一个 resultFile.csv
文件,开头如下:
a_id,b_id,var1,lo,up,var2,lo,up
103,195,ses,1,3,null,null,null
103,195,ses,4,113,null,null,null
103,195,pv,1,5,null,null,null
103,195,pv,6,29,null,null,null
103,195,ses,1,3,pv,1,5
103,195,ses,1,3,pv,6,29
103,195,ses,4,113,pv,1,5
103,195,ses,4,113,pv,6,29
103,266,dwl,15,92,null,null,null
103,266,dwl,93,144,null,null,null
103,266,dwl,145,521,null,null,null
...
使用 Python 2.6.6 进行测试(我相信 OP 正在使用)