Python - Agregar datos al marco de datos

CorePress2024-01-25  252

Hice un código en el que elijo la forma de onda sísmica de la onda P, básicamente es una selección de tiempo a lo largo de la forma de onda, también calculo la relación señal-ruido y otras variables.

Aquí está parte de mi código.

for tr in st:
    tr_cut = tr.trim(A, B) #cut the waveform from A to B section
#Here starts to compute the P time, Signal-to-noise, etc    
    scnl, picks, polarity, snr, uncert = picker.picks(tr_cut)
    all_ = []
for i in range(len(picks)):
    print (scnl, picks[i], polarity, snr, uncert) # this is the output
# Here I try to append the data inside a DataFrame
    all_.append(
        {
            'scnl': scnl,
            'picks': picks[i],
            'snr': snr,
            'polarity': polarity,
            'uncert': uncert
         }
     )
     pd.DataFrame(all_)

Pero no puedo agregar el resultado de la función que especifico aquí

scnl, selecciones, polaridad, snr, uncert = picker.picks(tr_cut)

Sin embargo, si imprimo la salida de la función obtengo los resultados

imprimir (scnl, picks[i], polaridad, snr, uncert) da una salida como esta:

BBOJ.SHZ.BO., UTCDateTime(2020, 11, 10, 13, 9, 59, 200000), '', 8.1999993, 0.02 
BBOD.SHZ.BO., UTCDateTime(2020, 11, 10, 13, 10, 4, 260000), 'D', 9.5, 0.02 
BBOB.SHZ.BO., UTCDateTime(2020, 11, 10, 13, 10, 7, 620000), 'C', 8.90004, 0.040000

El objetivo de mi idea es agregar toda esta salida dentro del DataFrame pero no puedo hacerlo. Además, mientras intento convertir mi DataFrame a CSV, aparece el siguiente error.

El objeto 'lista' no tiene el atributo 'to_csv'

¿Te importaría darme tu opinión sobre lo que hago?esta mal, gracias Tonino



------------------------------------

¿Al agregar, aparece algún error o simplemente no funciona? Con la información actual, parece que lo siguiente resolverá su problema:

Tienes que asignar tu marco de datos a alguna variable (digamos df). Además, parece que querrás crear un marco de datos después de haber terminado de iterar sobre all_. Si ese es el caso, debes realizar la siguiente asignación fuera del bucle for.

df = pd.DataFrame(all_)

Acerca de tu segundo error, parece que has probado all_.to_csv(). Como all_ es una lista, to_csv no funcionaría. Probablemente querrás hacer df.to_csv().

5

No obtuve errores, obtuve un DataFrame vacío. tenías razón sobre df.to_csv(all_), sin embargo, también es un archivo csv vacío

-tonino

28/03/2021 a las 19:05

prueba df = pd.DataFrame.from_dict(all_, orient='columns'), ¿funcionó?

- Profundo

Mamá28 de enero de 2021 a las 19:11

Los mismos resultados tengo un DataFrame vacío, ¿crees que mover all_=[] fuera del primer bucle for ayudará?

-tonino

28/03/2021 a las 19:21

funcionó sacando todo = [] ahora tengo el DataFrame con información

-tonino

28 de marzo de 2021a las 19:26

Estaba intentando reproducir el error pero no pude. ¡Me alegro de que esté funcionando ahora!

- Profundo

28/03/2021 a las 19:33



------------------------------------

Para que funcione modifiqué un poco el código con sugerencias de @Deep.

all_ = []
for tr in st:
    tr_cut = tr.trim(A, B) #cut the waveform from A to B section
#Here starts to compute the P time, Signal-to-noise, etc    
    scnl, picks, polarity, snr, uncert = picker.picks(tr_cut)
   
for i in range(len(picks)):
    print (scnl, picks[i], polarity, snr, uncert) # this is the output
# Here I try to append the data inside a DataFrame
    all_.append(
        {
            'scnl': scnl,
            'picks': picks[i],
            'snr': snr,
            'polarity': polarity,
            'uncert': uncert
         }
     )
     df = pd.DataFrame.from_dict(all_, orient='columns')
     df.to_csv("Picks.csv")

Mover la variable all_ = [] fuera del primer bucle resolvió mi problema

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare