如何使用Python将字符串文件转换为矩阵

时间:2015-12-10 13:59:12

标签: python numpy pandas

我有一个包含以下字符串的文件:

Rspec

我需要将其转换为这样的矩阵:

rails_admin actions

非常感谢任何帮助

4 个答案:

答案 0 :(得分:1)

def rows(data):
    while True:             
        a = next(data).split()
        b = next(data).split()
        yield float(a[1]), float(a[2]), float(b[0])

list(rows(open("somefile.txt")))
[(40.87, 0.71, 0.0), (40.96, 0.87, 0.0), (41.21, 0.98, 0.0)]

numpy.array(list(rows(open("somefile.txt"))))
array([[ 40.87,   0.71,   0.  ],
       [ 40.96,   0.87,   0.  ],
       [ 41.21,   0.98,   0.  ]])

P.S。我不知道那些被忽略的字段570363是什么......

答案 1 :(得分:1)

import pandas as pd
take_cols = [1,2,5]
mat = pd.read_table(in_file,sep="\t",usecols=take_cols)

答案 2 :(得分:0)

您可以使用pandas包中的read_table读取您的文件。然后将其子集化以使用您需要的列,然后使用返回numpy数组的values方法获取该数据帧的值:

import pandas as pd
df = pd.read_table(file, sep='\s+', header=False)

In [157]: df
Out[157]: 
   0      1     2    3    4  5
0  1  40.87  0.71  570  363  0
1  2  40.96  0.87  575  367  0
2  3  41.21  0.98  578  378  0


mat = df[[1,2,5]].values

In [160]: mat
Out[160]: 
array([[ 40.87,   0.71,   0.  ],
       [ 40.96,   0.87,   0.  ],
       [ 41.21,   0.98,   0.  ]])

答案 3 :(得分:0)

非常感谢所有人,我终于找到了另一个解决方案:

c = 0
f = open(fich_interp_out, 'w')
for i in open(fich_interp, 'r'):
    if c<3:
        pass

    elif c%2 != 0:

        s = i[:-1]
    else:
        s += i
        f.write(s)

    c+=1