es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Promedio de datos CSV

Estoy intentando procesar los datos por minuto en un formato por hora a partir del siguiente archivo de datos ejemplo:

...
$2021-01-27 14:22:59, 7877479, 8388606, -0.1059374, -17.6280, 26.75315, 17.09192, 85.2, 8.05, 97.63, 1.642691, 1.665497, 12.13, 1.621841, 1.541391
$2021-01-27 14:23:59, 7865387, 8388606, -0.2734679, -19.2070, 25.73683, 17.42454, 85.3, 8.05, 68.57, 1.642685, 1.660315, 9.52, 1.621823, 1.557271
$2021-01-27 14:24:59, 7853363, 8377689, -0.3185322, -2.0235, 24.95236, 17.73101, 84.9, 8.05, 54.95, 1.642676, 1.657235, 7.96, 1.621809, 1.564930
$2021-01-27 14:25:59, 7842250, 8357877, -0.2209551, 10.2949, 24.49805, 18.00294, 85.1, 8.05, 46.31, 1.642646, 1.655068, 6.67, 1.621802, 1.574302
...

El código que tengo hasta ahora para promediar una columna es:

import csv
import pandas as pd
from pandas.io.parsers import read_fwf

dataFile = 'C:fileLoction'

df = pd.read_csv(dataFile)

def readFile():
    df['TS'] = pd.to_datetime(df['Timestamp'], format='%Y/%m/%d %H:%M')
    df.index = df['TS']
    df1 = df.resample('H').mean()
    print(df1)

readFile()

Sin embargo, esto no cambia los datos. ¿Alguien puede ayudarme a depurar esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que hay algunas cosas que deben ajustarse en el código proporcionado para procesar correctamente el archivo de datos en un formato por hora:

    1. El archivo de datos no parece estar en formato CSV, ya que las columnas están separadas por comas en lugar de utilizar un delimitador. Por lo tanto, puede ser necesario ajustar el código para leer el archivo utilizando un método de análisis diferente, como read_fwf() o read_table().
    2. El primer carácter de cada línea del archivo de datos no es válido para un archivo CSV y puede causar problemas al leer los datos. Estos caracteres deben eliminarse del archivo antes de intentar leerlo.

    3. El formato especificado en la función pd.to_datetime() no coincide con el formato de la marca de tiempo en el archivo de datos. En lugar de format=r'%Y/%m/%d %H:%M', el formato debería ser format='$%Y-%m-%d %H:%M:%S' para que coincida con el formato de marca de tiempo en el archivo de datos.

    4. La función readFile en realidad no se está llamando, ya que le faltan los paréntesis al final. Debe ser readFile() en su lugar.

    Aquí hay una versión modificada del código que debería procesar correctamente el archivo de datos en un formato por hora:

    import pandas as pd
    from pandas.io.parsers import read_fwf
    
    dataFile = 'ruta/al/archivo_de_datos.txt'
    
    # eliminar caracteres no válidos del archivo de datos y leerlo utilizando el analizador fwf
    with open(dataFile, 'r') as f:
        data = f.read().replace('$', '')
    with open('temp.txt', 'w') as f:
        f.write(data)
    df = read_fwf('temp.txt', header=None, names=['Marca de tiempo', 'Col1', 'Col2', 'Col3', 'Col4', 'Col5', 'Col6', 'Col7', 'Col8', 'Col9', 'Col10', 'Col11', 'Col12', 'Col13', 'Col14'], colspecs=[(0, 23), (24, 31), (32, 39), (40, 50), (51, 59), (60, 71), (72, 83), (84, 88), (89, 94), (95, 100), (101, 109), (110, 118), (119, 125), (126, 134), (135, 143)])
    
    def readFile():
        df['TS'] = pd.to_datetime(df['Marca de tiempo'], format='$%Y-%m-%d %H:%M:%S')
        df.index = df['TS']
        df1 = df.resample('H').mean()
        print(df1)
    
    readFile()
    

    Este código lee el archivo de datos utilizando el analizador read_fwf() y especifica el ancho de las columnas utilizando el parámetro colspecs. Luego elimina los caracteres no válidos de la columna Marca de tiempo y la convierte a formato de fecha y hora utilizando $%Y-%m-%d %H:%M:%S como cadena de formato. Se utiliza el método resample() para agregar los datos en intervalos por hora y calcular la media de cada columna. Por último, se llama a la función utilizando readFile() para imprimir el DataFrame resultante.

Comments are closed.