为了账号安全,请及时绑定邮箱和手机立即绑定

Python-将矩阵转换为边列表/长格式

Python-将矩阵转换为边列表/长格式

侃侃无极 2021-03-28 12:11:30
我有一个非常大的csv文件,具有如下矩阵:null,A,B,CA,0,2,3B,3,4,2C,1,2,4它始终是一个* n矩阵。第一列和第一行是名称。我想将其转换为3列格式(也可以称为边列表,长格式等),如下所示:A,A,0A,B,2A,C,3B,A,3B,B,4B,C,2C,A,1C,B,2C,C,4我用过:row = 0for 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不起作用...能否请你帮忙?谢谢..
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

当您打印出各个单元格时,您还需要枚举列标题。


对于矩阵文件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


查看完整回答
反对 回复 2021-04-01
?
MMTTMM

TA贡献1869条经验 获得超4个赞

您需要跳过每一行的第一列:

for t in tokens[1:]:


查看完整回答
反对 回复 2021-04-01
  • 2 回答
  • 0 关注
  • 439 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号