我有一个包含以下字符串的文件:
Rspec
我需要将其转换为这样的矩阵:
rails_admin actions
非常感谢任何帮助
答案 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。我不知道那些被忽略的字段570
和363
是什么......
答案 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