如何选择特定数据并改革数据结构?csv python

如何选择特定数据并改革数据结构?csv python,python,csv,Python,Csv,我有一个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

我有一个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解决这个问题吗


谢谢,

这应该行得通。基本上,我只是将整个文件读入一个2D数组,然后在数组中迭代,每行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()

一个简单的解决方案如下。基本上,您只需要列出轴y>=轴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=',')

到目前为止,你有什么?运行两个嵌套循环:i为行,j你的问题听起来有点抽象,我猜a,B等实际上代表一些数据数?在矩阵中。如果你解释一下你真正想要达到的目标,也许会有所帮助,但我认为[可能对你有用。对不起,我还是python的新手,一开始我用R中的ginv来处理这个问题,我还在研究这个问题,然后我想python可能会有帮助,所以我尝试使用range函数来解决这个问题。谢谢,我知道pandas是一个不错的选择,但是,我可能需要一些时间来检查文档非常感谢你们的建议!谢谢你们的帮助,但是,我看到了这样的事情,你们对这个问题有什么想法吗?非常感谢你们的帮助,f.writestri+,+strj+1+,+stra[I][j+1]+os.linesep Indexer错误:列表索引超出范围很抱歉再次添加注释,即使它显示为Indexer错误,但我仍然得到了正确的结果!与索引a[I][j+1]有关其中一个是超出界限的。也许你正在使用的输入文件与上面给出的不同。我只是尝试了上面的示例。Hi @ USE3058899如果这个或任何答案已经解决了你的问题,请点击检查标记。这向更广泛的社区表明你已经找到了解决方案并给出了一些声誉。对于回答者和你自己。没有义务这样做。谢谢,对不起,我想这样做,但我的声誉目前还不够,因此我不能投票给你们的答案。一旦我获得足够的声誉,我将再次提供投票!: