4

次のようなマトリックスを含む非常に大きな csv ファイルがあります。

null,A,B,C

A,0,2,3

B,3,4,2

C,1,2,4

これは常に an*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

動作しません...

助けていただけますか?ありがとうございました..

4

2 に答える 2

3

また、個々のセルを印刷するときに、列のタイトルを列挙する必要があります。

行列ファイル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
于 2013-06-14T00:55:39.753 に答える
1

各行の最初の列をスキップする必要があります。

for t in tokens[1:]:
于 2013-06-14T00:49:51.427 に答える