[英]Python - Convert a matrix to edge list/long form
我有一个非常大的csv文件,有这样的矩阵:
null,A,B,C
A,0,2,3
B,3,4,2
C,1,2,4
它总是一个* n矩阵。 第一列和第一行是名称。 我想将它转换为3列格式(也可以称为边列表,长格式等),如下所示:
A,A,0
A,B,2
A,C,3
B,A,3
B,B,4
B,C,2
C,A,1
C,B,2
C,C,4
我用过:
row = 0
for line in fin:
line = line.strip("\n")
col = 0
tokens = line.split(",")
for t in tokens:
fout.write("\n%s,%s,%s"%(row,col,t))
col += 1
row += 1
不起作用......
能否请你帮忙? 谢谢..
您还需要枚举列标题作为打印单个单元格。
对于矩阵文件mat.csv :
null,A,B,C
A,0,2,3
B,3,4,2
C,1,2,4
以下程序:
csv = open("mat.csv")
columns = csv.readline().strip().split(',')[1:]
for line in csv:
tokens = line.strip().split(',')
row = tokens[0]
for column, cell in zip(columns,tokens[1:]):
print '{},{},{}'.format(row,column,cell)
打印出来:
A,A,0
A,B,2
A,C,3
B,A,3
B,B,4
B,C,2
C,A,1
C,B,2
C,C,4
要生成上对角线 ,可以使用以下脚本:
csv = open("mat.csv")
columns = csv.readline().strip().split(',')[1:]
for i, line in enumerate(csv):
tokens = line.strip().split(',')
row = tokens[0]
for column, cell in zip(columns[i:],tokens[i+1:]):
print '{},{},{}'.format(row,column,cell)
这导致输出:
A,A,0
A,B,2
A,C,3
B,B,4
B,C,2
C,C,4
您需要跳过每行中的第一列:
for t in tokens[1:]:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.