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.

Extraiga las columnas separadas por espacios de un archivo .txt y agréguelas para guardarlas en un nuevo dataframe.

Soy un traductor de español que traduce documentos de tecnología de la información. Traduzca lo siguiente al español. No traduzca el código y la salida en formato markdown.

Soy un novato cuando se trata de Python y estoy intentando crear un script que recorra una carpeta y tome todos los archivos .txt que contengan 2 columnas de datos que solo estén separados por espacios. Luego quiero tomar solo la segunda columna de estos archivos .txt y guardarlos en un nuevo dataframe con ‘lag’ como índice y el nombre de archivo como encabezado. Me he quedado un poco atascado, ya que no puedo hacer más que imprimir los nombres de archivo y eso es todo. Agradecería mucho cualquier ayuda. (PS disculpas por la línea de -50 a 50 vergonzosa, sé que hay una forma más eficiente de hacerlo, pero no pude encontrar una forma que funcionara con valores negativos. Gracias de antemano).

def changeFolder(self):
#print('woo')

folder = QFileDialog.getExistingDirectory(None, 'Datos del proyecto', 'Archivos .csv')
print(folder)
if folder == None:
    return
else:
    print(folder)

# import required modules
print('woo')
from glob import glob
import pandas as pd
import numpy as np
import os
for files in os.listdir(folder):
    if files.endswith(".txt"):
        print(files)
        data = [pd.read_csv(files, sep=" ", header=None) for files in folder]

for data in files:
    print(data)
# transpose columns using numpy
   #tcols = np.transpose(cols)
# create lag variable for the time lag array from -50 to 50
lag = [-50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30,
       -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9,
       -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
       21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
       47, 48, 49, 50]
# constructs dataframe using pandas with the transposed columns, header as respective filenames and index column as time lag
df = pd.DataFrame(data, columns=[files], index=lag)
# converts dataframe to .csv file and saves as specified filename below in specified path
extracted = df.to_csv(r'D:\GLaDOS-CAMPUS\data\TestData-AB\ExtractedABFiles.csv')

##Dialogue box in case of success
mbox = QMessageBox()
mbox.setText("¡Espero que esto haya funcionado!")
mbox.setDetailedText("")
mbox.setStandardButtons(QMessageBox.Ok)
mbox.setWindowTitle('Procesador de lotes de archivos CSV')
mbox.exec_()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Script para recorrer una carpeta y extraer la segunda columna de todos los archivos .txt

    El siguiente script de Python recorre una carpeta especificada y extrae la segunda columna de todos los archivos .txt que contienen 2 columnas de datos separados por espacios. Los datos extraídos se guardan en un nuevo marco de datos con ‘lag’ como índice y el nombre del archivo como encabezado. Se crea un array con tiempos de retardo de -50 a 50 que se utiliza como columna de índice. El marco de datos resultante se convierte en un archivo .csv y se guarda en una ruta especificada.


    import pandas as pd import os # especificar la ruta de la carpeta folder_path = r"ruta/a/la/carpeta" # crear un array con tiempos de retardo de -50 a 50 lag = range(-50, 51) # crear diccionario vacío para almacenar los datos extraídos data_dict = {} # recorrer los archivos de la carpeta for filename in os.listdir(folder_path): # comprobar si el archivo es un archivo .txt if filename.endswith(".txt"): # leer los datos en un marco de datos pandas df = pd.read_csv(os.path.join(folder_path, filename), sep=" ", header=None) # comprobar si el marco de datos tiene dos columnas if len(df.columns) == 2: # extraer la segunda columna como serie y agregarla a data_dict con el nombre del archivo como clave data_dict[filename] = df.iloc[:, 1] # crear un marco de datos vacío con tiempos de retardo como índice df_result = pd.DataFrame(index=lag) # recorrer los datos extraídos y agregarlos al marco de datos de resultado como columnas for filename, data in data_dict.items(): # interpolar los valores faltantes y agregarlos al marco de datos de resultado df_result[filename] = data.interpolation(method='linear').iloc[lag] # guardar el marco de datos de resultado como archivo .csv df_result.to_csv(r"ruta/a/nuevo/archivo/csv")

    Este script utiliza la biblioteca pandas para leer y manipular los datos y la biblioteca os para navegar por el sistema de archivos. El marco de datos de resultado se crea primero extrayendo la segunda columna de todos los archivos .txt válidos y agregándolos como columnas a un marco de datos vacío con los tiempos de retardo como índice. Cualquier valor faltante se interpola utilizando un método de interpolación lineal. El marco de datos resultante se guarda luego como un archivo .csv.

Comments are closed.