我如何 select 特定数据并改革我的数据结构? .csv python
How could I select particular data and reform my data structure? csv python
我有一个 matrix.csv 文件,看起来像这样,
1,2,3,4 ............
1,A,B,C,D
2,E,F,G,H
3,I,J,K,L
4,M,N,P,Q
.
.
.
.
但是,我只需要数据的一个子集(因为B只是E^-1,C是I^-1等等,我不需要全部。)
1,2,3,4 ........
1,A
2,E,F
3,I,J,K
4,M,N,P,Q
.
.
.
.
.
然后,我希望我能得到一个 result.csv 文件,如下所示,
1,1,A
2,1,E
2,2,F
3,1,I
3,2,J
3,3,K
4,1,M
4,2,N
4,3,P
4,4,Q
....
....
....
....
我已经尝试了一整天的解决方案,但仍然无法正常工作。有谁知道如何使用 python 解决这个问题?
谢谢,
这应该有效。基本上我只是将整个文件读入一个二维数组,然后遍历数组,每一行(i-loop)添加一列(j-loop)。
import csv, os
with open('in.csv', 'r') as csvfile:
a = []
for row in csv.reader(csvfile, delimiter=',', quotechar='|'):
a += [ row ]
f = open('out.csv', 'w')
i = 0
for i in range(len(a[0])):
i += 1
for j in range(i):
f.write(str(i) + "," + str(j+1) + "," + str(a[i][j+1]) + os.linesep)
f.close()
一个numpy解决方案如下。基本上你想要的只是用 axis_y >= axis_x:
列出这些值
from cStringIO import StringIO
import numpy as np
datacsv = StringIO("""A,B,C,D
E,F,G,H
I,J,K,L
M,N,O,P
""")
data = np.genfromtxt(datacsv, dtype='S1', delimiter=',', skip_header=False)
ROW, COL = data.shape
assert (ROW == COL)
indexes = np.arange(ROW*COL)
y = indexes/ROW
x = np.mod(indexes, ROW)
v = data.reshape(ROW*COL)
a = np.column_stack((x, y, v))[y >= x]
np.savetxt('output.csv', a, fmt='%s', delimiter=',')
我有一个 matrix.csv 文件,看起来像这样,
1,2,3,4 ............
1,A,B,C,D
2,E,F,G,H
3,I,J,K,L
4,M,N,P,Q
.
.
.
.
但是,我只需要数据的一个子集(因为B只是E^-1,C是I^-1等等,我不需要全部。)
1,2,3,4 ........
1,A
2,E,F
3,I,J,K
4,M,N,P,Q
.
.
.
.
.
然后,我希望我能得到一个 result.csv 文件,如下所示,
1,1,A
2,1,E
2,2,F
3,1,I
3,2,J
3,3,K
4,1,M
4,2,N
4,3,P
4,4,Q
....
....
....
....
我已经尝试了一整天的解决方案,但仍然无法正常工作。有谁知道如何使用 python 解决这个问题?
谢谢,
这应该有效。基本上我只是将整个文件读入一个二维数组,然后遍历数组,每一行(i-loop)添加一列(j-loop)。
import csv, os
with open('in.csv', 'r') as csvfile:
a = []
for row in csv.reader(csvfile, delimiter=',', quotechar='|'):
a += [ row ]
f = open('out.csv', 'w')
i = 0
for i in range(len(a[0])):
i += 1
for j in range(i):
f.write(str(i) + "," + str(j+1) + "," + str(a[i][j+1]) + os.linesep)
f.close()
一个numpy解决方案如下。基本上你想要的只是用 axis_y >= axis_x:
列出这些值from cStringIO import StringIO
import numpy as np
datacsv = StringIO("""A,B,C,D
E,F,G,H
I,J,K,L
M,N,O,P
""")
data = np.genfromtxt(datacsv, dtype='S1', delimiter=',', skip_header=False)
ROW, COL = data.shape
assert (ROW == COL)
indexes = np.arange(ROW*COL)
y = indexes/ROW
x = np.mod(indexes, ROW)
v = data.reshape(ROW*COL)
a = np.column_stack((x, y, v))[y >= x]
np.savetxt('output.csv', a, fmt='%s', delimiter=',')