¿Cómo puedo reemplazar los valores de un archivo de texto con otros valores de otro archivo de texto solo si ciertos valores son iguales?

Tengo un archivo llamado finalscores.txt y quiero crear una secuencia de comandos de python que lo abrirá y leerá en valores de dos columnas separadas.

Este es mi archivo finalscores.txt

  Atom nVa predppm avgppm stdev delta QPred QMulti qTotal 7.H2 2 7.674 7.853 0.000 0.000 0.968 1.000 0.993 9.H2 2 7.434 7.458 0.000 0.001 0.996 1.000 0.999 20.H2 1 7.602 7.898 0.000 0.000 0.945 1.000 0.982 21.H2 1 7.959 8.113 0.000 0.000 0.972 1.000 0.991 8.H1' 2 5.363 5.238 0.002 0.003 0.978 0.997 0.993 22.H1' 2 5.593 5.523 0.002 0.003 0.988 0.997 0.995 10.H1' 1 5.378 5.426 0.000 0.000 0.992 1.000 0.997 19.H1' 1 5.691 5.681 0.000 0.000 0.998 1.000 0.999 score: 0.9941270604681679 

Los valores que quiero tomar son los de la primera columna “Atom” y la cuarta columna “avgppm”. No quiero tomar en la primera línea:

Atom nVa predppm avgppm stdev delta QPred QMulti qTotal

o la última línea: score: 0.9941270604681679

Tengo otro archivo llamado pinkH1_ppm.txt y quiero abrirlo y adjuntarlo. Así es como se ve mi pinkH1_ppm.txt :

 2.H8 7.61004 0.3 1.H8 8.13712 0.3 3.H6 7.53261 0.3 4.H8 7.49932 0.3 5.H6 7.72158 0.3 7.H8 8.16859 0.3 6.H6 7.70272 0.3 9.H8 8.1053 0.3 8.H6 7.65014 0.3 10.H6 7.5231 0.3 11.H6 7.58213 0.3 12.H6 7.72805 0.3 13.H6 8.02977 0.3 14.H6 7.69624 0.3 15.H8 7.82994 0.3 17.H8 7.24899 0.3 18.H6 7.6439 0.3 20.H8 7.78512 0.3 19.H8 7.65501 0.3 22.H8 7.47677 0.3 23.H6 7.7306 0.3 24.H6 7.80104 0.3 25.H8 7.67295 0.3 26.H6 7.67463 0.3 27.H6 7.64807 0.3 1.H1' 5.8202 0.3 2.H1' 5.90291 0.3 4.H1' 5.74125 0.3 3.H1' 5.54935 0.3 6.H1' 5.54297 0.3 8.H1' 5.36287 0.3 11.H1' 5.50093 0.3 10.H1' 5.37814 0.3 14.H1' 5.96177 0.3 15.H1' 5.959 0.3 17.H1' 5.75214 0.3 19.H1' 5.69108 0.3 22.H1' 5.59257 0.3 24.H1' 5.55313 0.3 25.H1' 5.70819 0.3 27.H1' 5.74236 0.3 26.H1' 5.48061 0.3 

Quiero verificar si alguno de los valores de la “Columna Atom” en mi finalscores.txt coincide con los valores en la primera columna de pinkH1_ppm.txt y, si lo hacen, quiero reemplazar la segunda columna en mi pinkH1_ppm.txt con el valor para ese Atom de mi archivo finalscores.txt .

Así, por ejemplo, en finalscores.txt , 19.H1 ‘es el átomo que también se puede encontrar en pinkH1_ppm.txt así que me gustaría reemplazar el valor en la segunda columna de pinkH1_ppm.txt , que también corresponde a 19.H1′ , que es 5.69108 con 5.681.

Este es mi código hasta ahora:

 import pandas as pd import os import sys import re filename = 'finalscore.txt' ppmColor = 'pinkH1_ppm.txt' df = pd.read_cv(filename,sep = " ", skiprows = 1) col1 = df["Atom"] col2 = df["avgppm"] df2 = pd.read_cv(ppmColor,sep = " ", skiprows=0) name = df2[0] ppm = df2[1] with open(ppmColor, "a") as ppmAppend: for line in ppmAppend if col1 == name: 

Estoy tratando de usar pandas. No estoy muy seguro de mi segundo dataframe df2 porque no hay encabezado en el archivo ppmColor, quiero comenzar a leerlo desde la primera línea. Pensé que usar pandas sería la mejor idea, pero no estoy seguro de cómo abordar esto exactamente.

Error: replaceppm.py:10: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support skipfooter; you can avoid this warning by specifying engine='python'. replaceppm.py:10: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support skipfooter; you can avoid this warning by specifying engine='python'.

df=pd.read_csv('finalscore.txt',sep=r'\s+',skipfooter=1)

Traceback (most recent call last):

File"replaceppm.py", line 18, in

pink.set_index("Atom",inplace=True)

NameError: name 'pink' is not defined

Si lees los dos csvs en los objetos DataFrame pandas, entonces es cuestión de actualizar el segundo con los valores del primero. El método de actualización requiere que los dos marcos de datos tengan un índice similar.

 import pandas as pd df = pd.read_csv('finalscores.csv', sep=r'\s+', engine='python', skipfooter=1) df = df.ix[:, ['Atom', 'avgppm']] pink = pd.read_csv('pinkH1_ppm.txt', sep=r'\s+', header=None, names=('Atom', 'avgppm', 'x')) df.set_index('Atom', inplace=True) pink.set_index('Atom', inplace=True) pink.update(df)