Tengo un archivo que contiene las siguientes cadenas:
1 40.870 0.710 570 363
0.00000E+00
2 40.960 0.870 575 367
0.00000E+00
3 41.210 0.980 578 378
0.00000E+00
Y necesito convertirlo en una matriz así:
40.870 0.710 0.000
40.960 0.870 0.000
41.210 0.980 0.000
Cualquier ayuda sería muy apreciada
0
Vanessa
10 dic. 2015 a las 16:59
4 respuestas
La mejor respuesta
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. ]])
PD No tengo idea de cuáles fueron esos campos 570
y 363
que fueron ignorados ...
1
Dima Tisnek
10 dic. 2015 a las 14:08
Muchas gracias a todos, finalmente encontré otra solución:
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
0
Vanessa
15 dic. 2015 a las 09:10
Puede leer su archivo con read_table
del paquete pandas. Luego, configúrelo para usar las columnas que necesita, y luego obtenga los valores de esos marcos de datos con el método values
que devuelve una matriz numpy:
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. ]])
0
Anton Protopopov
10 dic. 2015 a las 17:52
import pandas as pd
take_cols = [1,2,5]
mat = pd.read_table(in_file,sep="\t",usecols=take_cols)
1
soungalo
10 dic. 2015 a las 14:14